Perlには、正規表現のすべての特殊文字をエスケープするためのmetaquote()
という関数があります。
egrep
に相当する手法はありますか?
例:文字列_abc.def.ghi
_を検索している場合、ドットを手動でエスケープすることを忘れないでください(例:_abc\.def\.ghi
_)。
egrep
にはこれを行うための組み込みのモード/機能がないと思いますが、egrep
のmetaquote()
をシミュレートするためにPerl/sed/awkの「ワンライナー」を利用できます。また、Perlのmetaquote()
は些細な場合でも機能する可能性がありますが、正規表現の構文はegrep
とPerl
で異なります。
-F
オプションを使用して、grep
がパターンを固定文字列として扱うようにします。
grep -F 'abc.def.ghi' <file
また、egrep
を呼び出す必要がないことにも注意してください。
自分で行う必要があります。このsedコマンドは、英数字以外の文字をエスケープしました。これは、quotemeta
が行うことです(IIRC)
str="abc.def.ghi"
escaped=$(sed 's/[^[:alnum:]]/\\&/g' <<< "$str")
echo "$escaped" # => abc\.def\.ghi
元の文字列を正規表現として使用しているため、これが一致すると予想されます
$ echo "foo bar abc-def-ghi baz" | grep "$str"
foo bar abc-def-ghi baz
エスケープされた文字列を使用しているため、これは一致しないと予想されます。
$ echo "foo bar abc-def-ghi baz" | grep "$escaped"
$ echo $?
1
エスケープされた文字列を使用しているため、これが一致すると予想されます。
$ echo "foo bar abc.def.ghi baz" | grep "$escaped"
foo bar abc.def.ghi baz