OSXの新しいバージョンではgrep -P
がサポートされなくなったため、一部のスクリプトが機能しなくなりました。
var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt`
Grepを変数にキャプチャする必要があり、ゼロ幅のアサーションと\K
を使用する必要があります
var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt`
代替案は大歓迎です。
最小限の作業を行いたい場合は、変更します
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`
スクリプトが使用専用の場合は、 homebrew-core
から grep
を使用してbrew
をインストールできます。
brew install grep --with-default-names
--with-default-names
を指定すると、システムgrep
を置き換えます(実際には、PATH
のシステムgrepをシステムの前に置きます)。
brew
によってインストールされるバージョンには-P
オプションが含まれているため、スクリプトを変更する必要はありません。
--with-default-names
なしでインストールした場合、ggrep
(GNU grep
)として利用可能です。
ack をインストールして、代わりに使用します。 AckはPerlで書かれたgrepの置き換えです。 Perlの正規表現を完全にサポートしています。
OS Xは、GNUツールではなくBSDを提供する傾向があります。doesegrep
が付属しています。
例:_egrep 'fo+b?r' foobarbaz.txt
_
OSX grepのmanページからの抜粋:
grep is used for simple patterns and basic regular expressions (BREs); egrep can handle extended regular expressions (EREs).
use Perl;
Perl -ne 'print if /regex/' files ...
さらにgrep
オプションが必要な場合(-o
少なくとも)ネットにはさまざまなpgrep
実装があり、それらの多くはPerlにあります。
「ほぼPerl」で十分であれば、PCREにはpcregrep
が付属しています。
別の選択肢があります:pcregrep
。
Pcregrep は、Perl互換の正規表現を持つgrepです。 grep -P
とまったく同じ使用法です。したがって、スクリプトと互換性があります。
Homebrewでインストールできます:
brew install pcre
「-E」オプションを使用してはどうですか?たとえば、php_Zip
、php_xml
、php_Gd2
拡張子php -mを使用:
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' {} '+'
これは私のために働いた:
awk -F":" '/PATTERN/' file.txt
-Pの別のPerlソリューション
var1=$( Perl -ne 'print $1 if m#<st:italic>([^<]+)</st:italic># ' file.txt)
検索出力をパイプで渡すことにより、Perlのワンライナー正規表現を使用します。 lookbehind(get src html内のリンク)とlookaheadを"に使用し、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&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 'elasticsearch-2.0'" rel="tag">elasticsearch-2.0</a> <a href="/questions/tagged/elasticsearch-dsl" class="post-tag" title="show questions tagged 'elasticsearch-dsl'" 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 'sharding'" rel="tag">sharding</a> <a href="/questions/tagged/master" class="post-tag" title="show questions tagged 'master'" 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 'linux'" rel="tag">linux</a> <a href="/questions/tagged/camera" class="post-tag" title="show questions tagged 'camera'" 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 'firebase'" 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 'firebase-authentication'" 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 'ios'" rel="tag">ios</a> <a href="/questions/tagged/in-app-purchase" class="post-tag" title="show questions tagged 'in-app-purchase'" rel="tag">in-app-purchase</a> <a href="/questions/tagged/piracy-protection" class="post-tag" title="show questions tagged 'piracy-protection'" 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 'unity3d'" rel="tag">unity3d</a> <a href="/questions/tagged/vr" class="post-tag" title="show questions tagged 'vr'" 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