2017-07-29 1 views
0

Ich lief eine Inline-sed auf ein großes Verzeichnis von PHP-Dateien. Die Absicht war, das http:// Präfix von URLs in Protokoll-relative URLs // umzuwandeln, so dass sie sogar mit https Links arbeiten konnten. Versehentlich habe ich damit mehrere hundert curl-Abfragen gemacht, und diese Leute mögen diese URLs leider nicht. Also habe ich versucht, diese mit grep für Muster // zu finden. Das Problem ist, dass Kommentare auch mit // beginnen. Ich habe versucht, grep in einer Pipe zu verketten, damit ich Kommentare ausschließen kann.grep Regex Abfrage

Ich habe versucht, 1 oder mehr Leerzeichen am Anfang der Zeile auszuschließen, da die meisten meiner Kommentare eingerückt schien. Aber es funktioniert nicht.

grep --color=always -inr '//' *php | grep -v '^\s+//' 

Meine Argumentation ist, dass der erste grep Spiele Kommentare mit zwei Schrägstrichen, dann die zweite gilt nicht für jene Linien, wo die Linie mit einem oder mehreren Leerzeichen beginnt. Es scheint jedoch nicht so zu funktionieren. Hier ist ein Beispiel, das ich habe:

tvsearch.php:3:// Resource for iteration of nested php arrays 
tvsearch.php:4:// //stackoverflow.com/a/3684584/1305947 
tvsearch.php:14:// define('__ROOT__', dirname(dirname(__FILE__))); 
tvsearch.php:15:// require_once(__ROOT__.'/htdocs/config.php'); 
tvsearch.php:16:// require_once(__ROOT__.'/htdocs/sqlfunctions.php'); 
tvsearch.php:17:// GetCredentialsDB(); 
tvsearch.php:19: // <link href="/css/bootstrap.min.css" rel="stylesheet"> 
tvsearch.php:20: // <link href="https://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css" rel="Stylesheet"></link> 
tvsearch.php:21: // <script src="/js/bootstrap.js"></script> 
tvsearch.php:22: // <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
tvsearch.php:25:// <link href="/css/grid.css" rel="stylesheet"> 
tvsearch.php:26:// <link href="/css/cover.css?v=1" rel="stylesheet"> 
tvsearch.php:44: <!-- link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous"> --> 
tvsearch.php:52: <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" integrity="sha384-3ceskX3iaEnIogmQchP8opvBy3Mi7Ce34nWjpBIwVTHfGYWQS9jwHDVRnpKKHJg7" crossorigin="anonymous"></script> --> 
tvsearch.php:53: <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.7/js/tether.min.js" integrity="sha384-XTs3FgkjiBgo8qjEjBk0tGmf3wPrWtA6coPfQDfFEY8AnYJwjalXCiosYRBIBZX8" crossorigin="anonymous"></script> --> 
tvsearch.php:56: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js" integrity="sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK" crossorigin="anonymous"></script> 
tvsearch.php:100:    <li><a href="//www.tv.com" target="_blank">TV.com</a></li>'; 
tvshowcarousel.php:54:    <li><a href="//www.tv.com" target="_blank">TV.com</a></li> 
tvtest.php:2:// Resource for iteration of nested php arrays 
tvtest.php:3:// //stackoverflow.com/a/3684584/1305947 
tvtest.php:11:// require_once "/tvmaze/TVMazeIncludes.php"; 
tvtest.php:18: //Return all tv shows relating to the given input 
tvtest.php:19: // $showinfo = $Client->TVMaze->search("Arrow"); 
tvtest.php:21: //Return the most relevant tv show to the given input 
tvtest.php:23: // Array [0] contains general info about the show 
tvtest.php:29: // print_r($showinfo); 
tvtest.php:30: // Array [1] contains all episode information 
tvtest.php:32: // 
tvtest.php:33: // // print_r($showinfo[1]); 
tvtest.php:37:     // print_r($innerArray); 
tvtest.php:40:       // echo "<p>Key:$key</p>"; 
tvtest.php:41:       // echo "<p>Value:$value</p>"; 
tvtest.php:47:         // print "<p>Season:".$season." Episode:".$episode."</p>"; 
tvtest.php:57: // print $showinfo[1]['season'] 
tvtest.php:58: // $tmpArray = $showinfo[1]; 
tvtest.php:59: // foreach ($tmpArray as $innerArray) { 
tvtest.php:60: //  print $innerArray['season']; 
tvtest.php:61: // } 
tvtest.php:65: // print_r($showinfo[0]->[summary]); 

Wie gehe ich den falschen Weg? Was ich brauche, ist nur Zeilen wie diese entsprechen:

tvshowcarousel.php:54:    <li><a href="//www.tv.com" target="_blank">TV.com</a></li> 
torcontrol.php:  curl_setopt($ch,CURLOPT_URL,"//".$this->host."/gui/?action=forcestart".$hashes); 

Zusammengefasst Das Problem: Überlegen Sie sich eine grep Abfrage // innerhalb der Zeile zu finden, aber die Zeile nicht beginnen (ohne Leerzeichen vor ihnen)

+1

Ihre erste 'grep' fügt den Dateinamen (zB' tvtest.php: 61: '), so dass die zweite 'grep' sieht keine Zeilen, die mit Leerzeichen beginnen. –

+0

Oh! Schöner Fang! Also brauche ich nur die Option "-h" – Droidzone

+0

Ihre Problemstellung ist unklar. Es klingt, als ob du Dinge auf die harte Tour machst. Sie wollen 'http: //' in '//' außer in 'curl' Abfragen ändern, ja? Aber was unterscheidet eine Curl-Abfrage-URL von anderen URLs? Das hast du nie erwähnt. – Gene

Antwort

1

Vielleicht können Sie sich auf das Muster konzentrieren, das Sie versuchen, statt des Musters zu fangen, das Sie sind nicht versuchen zu fangen.

Zum Beispiel, wenn alle // zwischen Anführungszeichen sind Sie so etwas wie dies versuchen:

grep --color=always -inr '"//.*"' *php 
+1

Das ist ein guter Rat. :) – Droidzone