2017-07-29 109 views
0

我在php文件的大目錄上運行了內聯sed。其目的是將網址前綴http://轉換爲協議相關網址//,以便他們甚至可以使用https鏈接。無意中我最終做了幾百個捲曲查詢,不幸的是那些不喜歡這些網址。 所以我試圖找到這些grep的模式//。問題是評論也以//開頭。我嘗試在管道中鏈接grep,以便可以排除註釋。grep正則表達式查詢

我試圖在行的開頭排除一個或多個空格,因爲我的大部分註釋似乎都是縮進的。但它不工作。

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

我的理由是,第一匹配的grep與兩條斜線,註釋然後第二個不包括在其中的線開始於一個或多個空格的那些行。但它似乎並沒有像那樣工作。這裏有一個我得到的樣本:

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]); 

我怎麼會對此做錯誤的方式?我需要的是要匹配這樣的只行:

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); 

總之,這個問題:設計一個grep的查詢到行內找到//,而不是開頭的行(之前不包括任何空格)

+1

你的第一個'grep'是添加的文件名(如:'tvtest.php:61:'),所以第二'grep'看不到以空格開頭的行。 –

+0

哦!好的趕上!所以我只需要'-h'選項 – Droidzone

+0

你的問題陳述不清楚。聽起來你正在以艱難的方式做事。除'curl'查詢外,您想要將'http://'更改爲'//',是的?但是,「curl」查詢URL與其他URL有什麼區別?你從未提到過。 – Gene

回答

1

也許你可以專注於你試圖捕捉的模式,而不是你正在試圖捕捉的模式而不是

例如,如果所有//是引號之間的你可以嘗試這樣的事:

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

這是合理的建議。 – Droidzone