1. ホーム
  2. macos

[解決済み] grep -P が効かなくなりました。どうすれば検索を書き換えることができますか?

2022-05-13 23:03:15

質問

新しいバージョンの 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`