metaquote()
Perlには、正規表現からすべての特殊文字をエスケープする機能があります。
これに相当する技術がありますかegrep
?
例:文字列を検索する場合は、abc.def.ghi
手動エスケープポイントを覚えておく必要があります。abc\.def\.ghi
egrep
私はこれを行うための組み込みモード/関数がないと仮定していますが、Perl / sed / awkで "one-liners"を使用してこれをエミュレートすることmetaquote()
もできます。また、Perlegrep
は単純な場合には機能しますが、metaquote()
正規表現間の式の構文は異なります。egrep
perl
答え1
パターンを固定文字列として-F
扱うには、オプションを使用します。grep
grep -F 'abc.def.ghi' <file
また、電話する必要がないことに注意してくださいegrep
。
答え2
自分で行う必要があります。この 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