パターンを/
一致させると、/
素早く脱出する必要があるのが扱いにくく、見苦しくなります。
/\/usr\/share\/man\//
sed、perl、またはVimの場合、正規表現には異なる区切り文字を使用します:
。たとえば、次のようになります。
sed '\:/usr/share/man/: do something'
perl -ne 'print if m:/usr/share/man/:'
:g:/usr/share/man/: do something " Vim
この問題をどのように回避できますか?それは次のとおりです。
awk ':/usr/share/man/: {do something}'
私が考えることができる最善の方法は変数を使用することです。
awk -v pat='/usr/share/man/' '$0 ~ pat {do something}'
しかし、これはsed / perl / vimアプローチと比較して非常に冗長です。
もちろん、パスを一致させる他の方法(例)がありますが、これがパターンに表示される/usr/share/man/
唯一の場所ではありません。/
答え1
ただ/testregexp/
に変更してください$0 ~ "testregexp"
簡単な例:
$ echo "a/b/c" | awk ' ( $0 ~ "a/b/c" ) { print "we have a winner" ; }'
we have a winner
他の例
regexp='some regexp "with /lots/ of double quotes" "everywhere"'
awk -v reg="${regexp}" ' ( $0 ~ reg ) { action here... }'
答え2
awk自体にはシンプルでシンプルなソリューションはありません。通常、Perlに切り替える(またはsed
簡単な操作のためにPerlに切り替える)のが一般的な回避策です。