grep 正则表达式查询

乔尔·马修

我在 php 文件的大目录上运行了内联 sed。目的是将http://url前缀转换为协议相关的 url,//以便它们甚至可以使用https链接。不经意间,我最终对数百个 curl 查询执行了此操作,不幸的是那些不喜欢这些 url 的查询。所以我试图用 grep for pattern 找到这些//问题是注释也以//. 我尝试在管道中链接 grep 以便我可以排除评论。

我试图在行首排除 1 个或多个空格,因为我的大部分评论似乎都缩进了。但它不起作用。

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 查询来查找//行内,但不开始行(不包括它们之前的任何空格)

毛里西奥·罗巴约

也许你可以专注于你试图捕捉的模式,而不是你不想捕捉的模式。

例如,如果全部//都在引号之间,您可以尝试这样的操作:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章