grep -P不再工作,我怎么能重写我的search

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

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

我需要捕获到一个variables的grep,我需要使用零宽度断言。 以及\ K

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

任何替代品将不胜感激。

如果你想做最less量的工作,改变

 grep -o -P 'PATTERN' file.txt 

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

所以你得到:

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

但是,您可以通过额外的工作来实现更简单的代码。

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

如果您的脚本仅供您使用,则可以使用brewhomebrew-core安装grep

 brew install grep --with-default-names 

当你指定--with-default-names ,它会replace系统的grep (实际上,把安装的grep放在PATH上的系统之前)。

brew安装的版本包含-P选项,所以不需要更改脚本。

如果你安装时没有--with-default-names ,那么它可以用ggrep (GNU grep )。

安装确认并使用它。 Ack是用Perl编写的grep替代品。 它完全支持Perl正则expression式。

use perl;

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

如果你需要更多的grep选项(我看你至less会喜欢-o ),有各种各样的pgrep实现浮在网上,其中许多是Perl。

如果“差不多Perl”足够好,那么PCRE就会附带pcregrep

OS X倾向于提供BSD而不是GNU工具。 它确实带有egrep ,但这可能是您执行正则expression式search所需要的全部内容。

例如: 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).

还有另一种select: pcregrep

Pcregrep是一个Perl兼容的正则expression式的grep。 它和grep -P具有完全相同的用法。 所以它将与您的脚本兼容。

它可以用自制软件安装:

brew install pcre

这个为我工作:

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

如何使用'-E'选项? 它适用于我,例如,如果我想检查从php -m php_zipphp_xmlphp_gd2扩展我使用:

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

相当于接受的答案,但没有-P开关的要求,而这两个机器都没有这个要求。

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

另一个用于-P的Perl解决scheme

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

使用perl单线程正则expression式通过传递查找输出与pipe道。 我使用了lookbehind (在html中获取src链接)并向前看 并将curl(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