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)
Ihre erste 'grep' fügt den Dateinamen (zB' tvtest.php: 61: '), so dass die zweite 'grep' sieht keine Zeilen, die mit Leerzeichen beginnen. –
Oh! Schöner Fang! Also brauche ich nur die Option "-h" – Droidzone
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