Grep -P больше не работает, как я могу переписать мои запросы
Похоже, что новая версия OSX больше не поддерживает grep -P и, как таковая, некоторые мои скрипты перестают работать.
var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt`
Мне нужно записать grep в переменную, и мне нужно использовать утверждения нулевой ширины. а также \K
var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt`
Приветствуются любые альтернативы.
Ответы
Ответ 1
Если вы хотите выполнить минимальный объем работы, измените
grep -P 'PATTERN' file.txt
к
perl -nle 'print if m{PATTERN}' file.txt
и измените
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`
Ответ 2
Если ваши сценарии предназначены только для вашего использования, вы можете установить grep
из homebrew-core
с помощью brew
:
brew install grep --with-default-names
Когда вы указываете --with-default-names
, он заменяет систему grep
(на самом деле, ставит установленный grep перед системой на PATH
).
Версия, установленная brew
, включает в себя параметр -P
, поэтому вам не нужно менять свои сценарии.
Если вы устанавливаете без --with-default-names
, тогда он доступен как ggrep
(GNU grep
).
Ответ 3
Установите ack и используйте его вместо этого. Ack - это замена grep, написанная на Perl. Он полностью поддерживает регулярные выражения Perl.
Ответ 4
use perl;
perl -ne 'print if /regex/' files ...
Если вам нужно больше параметров grep
(я вижу, что вам бы хотелось, по крайней мере, -o
), существуют различные реализации pgrep
, плавающие по сети, многие из них в Perl.
Если "почти Perl" достаточно хорош, PCRE отправляется с pcregrep
.
Ответ 5
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).
Ответ 6
Существует еще одна альтернатива: pcregrep
.
Pcregrep - это grep с регулярными выражениями, совместимыми с Perl. Он имеет то же значение, что и grep -P
. Таким образом, он будет совместим с вашими сценариями.
Он может быть установлен с доморощенным:
brew install pcre
Ответ 7
Как использовать опцию '-E'? Он отлично работает для меня,
например, если я хочу проверить расширение php_zip
, php_xml
, php_gd2
от php -m, я использую:
php -m | grep -E '(zip|xml|gd2)'
Ответ 8
Эквивалент принятого ответа, но без требования переключателя -P, который отсутствовал на обеих машинах, я был доступен.
find . -type f -exec perl -nle 'print $& if m{\r\n}' {} ';' -exec perl -pi -e 's/\r\n/\n/g' {} '+'
Ответ 9
Это работало для меня:
awk -F":" '/PATTERN/' file.txt
Ответ 10
Другое решение для Perl для -P
var1=$( perl -ne 'print $1 if m#<st:italic>([^<]+)</st:italic># ' file.txt)
Ответ 11
используйте регулярное выражение perl one-liner, передав вывод find с помощью трубы.
Я использовал lookbehind (получить 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="/info/tagged/elasticsearch-2.0" class="post-tag" title="show questions tagged 'elasticsearch-2.0'" rel="tag">elasticsearch-2.0</a> <a href="/info/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="/info/tagged/sharding" class="post-tag" title="show questions tagged 'sharding'" rel="tag">sharding</a> <a href="/info/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="/info/tagged/linux" class="post-tag" title="show questions tagged 'linux'" rel="tag">linux</a> <a href="/info/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="/info/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="/info/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="/info/tagged/ios" class="post-tag" title="show questions tagged 'ios'" rel="tag">ios</a> <a href="/info/tagged/in-app-purchase" class="post-tag" title="show questions tagged 'in-app-purchase'" rel="tag">in-app-purchase</a> <a href="/info/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="/info/tagged/unity3d" class="post-tag" title="show questions tagged 'unity3d'" rel="tag">unity3d</a> <a href="/info/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