grep的-P不再起作用。 我怎么可以重写我的搜索? grep的-P不再起作用。 我怎么可以重

2019-05-08 15:41发布

它看起来像OSX的新版本不再支持grep -P ,因此取得了一些我的脚本停止工作。

var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt`

我需要捕获grep来可变和我需要使用零点宽度的断言,以及\K

var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt`

任何替代将不胜感激。

Answer 1:

如果你想要做的工作的最小量,变化

grep -P 'PATTERN' file.txt

perl -nle'print if m{PATTERN}' file.txt

与变化

grep -o -P 'PATTERN' file.txt

perl -nle'print $& while m{PATTERN}g' file.txt

所以,你得到:

var1=`perl -nle'print $& while m{(?<=<st:italic>).*(?=</italic>)}g' file.txt`
var2=`perl -nle'print $& while m{(property:)\K.*\d+(?=end)}g' file.txt`

在特定情况下,可以实现与额外的工作更简单的代码。

var1=`perl -nle'print for m{<st:italic>(.*)</italic>}g' file.txt`
var2=`perl -nle'print for /property:(.*\d+)end/g' file.txt`


Answer 2:

如果你的脚本仅供您使用,您可以安装grephomebrew-core使用brew

brew install grep --with-default-names

当您指定--with-default-names ,它取代了系统grep (实际上,把安装的grep的系统中的一个之前在PATH )。

通过安装的版本brew包括-P选项,所以你不需要改变你的脚本。

如果安装不--with-default-names ,那么它可以作为ggrep (GNU grep )。



Answer 3:

安装ACK ,并用它来代替。 确认是grep的替代Perl写的。 它有一个Perl的正则表达式的全力支持。



Answer 4:

OS X趋向于提供BSD而不是GNU工具。 配备egrep然而,这可能是所有你需要执行正则表达式搜索。

例如: egrep 'fo+b?r' foobarbaz.txt

从OSX grep的手册页的代码段:

grep is used for simple patterns and basic regular expressions (BREs); egrep can handle extended regular expressions (EREs).



Answer 5:

use perl;

perl -ne 'print if /regex/' files ...

如果您需要更多grep选项(我看你想-o至少)有各种pgrep实现左右浮动净,其中不乏在Perl。

如果“几乎Perl的”足够好,PCRE附带pcregrep



Answer 6:

还有另外一种选择: pcregrep

Pcregrep与Perl兼容的正则表达式的grep。 它具有完全相同的用法grep -P 。 因此,它会随着你的脚本兼容。

它可以用自制的安装:

brew install pcre



Answer 7:

如何使用“-E”选项? 它工作正常的我来说吧,如果我要检查一个php_zipphp_xmlphp_gd2PHP扩展-m我使用:

php -m | grep -E '(zip|xml|gd2)'


Answer 8:

接受答案的等效,但没有-p开关,这是不存在的在两台机器上的要求,我只好用。

find . -type f -exec perl -nle 'print $& if m{\r\n}' {} ';' -exec perl -pi -e 's/\r\n/\n/g' {} '+'


Answer 9:

这一次为我工作:

    awk  -F":" '/PATTERN/' file.txt


Answer 10:

为-P另一个Perl的溶液

var1=$( perl -ne 'print $1 if m#<st:italic>([^<]+)</st:italic># ' file.txt)


Answer 11:

通过将查找输出与管道使用Perl的一行正则表达式。 我用回顾后 (获取HTML SRC链接),并前瞻“,并通过卷曲(HTML)的输出到它。

bash-3.2# curl stackoverflow.com | perl -0777 -ne '$a=1;while(m/(?<=src\=\")(.*)(?=\")/g){print "Match #".$a." "."$&\n";$a+=1;}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  239k  100  239k    0     0  1911k      0 --:--:-- --:--:-- --:--:-- 1919k
Match #1 //ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js
Match #2 //cdn.sstatic.net/Js/stub.en.js?v=fb6157e02696
Match #3 https://ssum-sec.casalemedia.com/usermatch?s=183712&amp;cb=https%3A%2F%2Fengine.adzerk.net%2Fudb%2F22%2Fsync%2Fi.gif%3FpartnerId%3D1%26userId%3D
Match #4 //i.stack.imgur.com/817gJ.png" height="16" width="18" alt="" class="sponsor-tag-img">elasticsearch</a> <a href="/questions/tagged/elasticsearch-2.0" class="post-tag" title="show questions tagged &#39;elasticsearch-2.0&#39;" rel="tag">elasticsearch-2.0</a> <a href="/questions/tagged/elasticsearch-dsl" class="post-tag" title="show questions tagged &#39;elasticsearch-dsl&#39;" rel="tag
Match #5 //i.stack.imgur.com/817gJ.png" height="16" width="18" alt="" class="sponsor-tag-img">elasticsearch</a> <a href="/questions/tagged/sharding" class="post-tag" title="show questions tagged &#39;sharding&#39;" rel="tag">sharding</a> <a href="/questions/tagged/master" class="post-tag" title="show questions tagged &#39;master&#39;" rel="tag
Match #6 //i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/linux" class="post-tag" title="show questions tagged &#39;linux&#39;" rel="tag">linux</a> <a href="/questions/tagged/camera" class="post-tag" title="show questions tagged &#39;camera&#39;" rel="tag
Match #7 //i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/firebase" class="post-tag" title="show questions tagged &#39;firebase&#39;" rel="tag"><img src="//i.stack.imgur.com/5d55j.png" height="16" width="18" alt="" class="sponsor-tag-img">firebase</a> <a href="/questions/tagged/firebase-authentication" class="post-tag" title="show questions tagged &#39;firebase-authentication&#39;" rel="tag
Match #8 //i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/ios" class="post-tag" title="show questions tagged &#39;ios&#39;" rel="tag">ios</a> <a href="/questions/tagged/in-app-purchase" class="post-tag" title="show questions tagged &#39;in-app-purchase&#39;" rel="tag">in-app-purchase</a> <a href="/questions/tagged/piracy-protection" class="post-tag" title="show questions tagged &#39;piracy-protection&#39;" rel="tag
Match #9 //i.stack.imgur.com/tKsDb.png" height="16" width="18" alt="" class="sponsor-tag-img">android</a> <a href="/questions/tagged/unity3d" class="post-tag" title="show questions tagged &#39;unity3d&#39;" rel="tag">unity3d</a> <a href="/questions/tagged/vr" class="post-tag" title="show questions tagged &#39;vr&#39;" rel="tag
Match #10 http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno
bash-3.2# date
Mon Oct 24 20:57:11 EDT 2016


文章来源: grep -P no longer works. How can I rewrite my searches?
标签: macos perl shell