awkで傾いたつまようじ症候群を避ける方法は?

awkで傾いたつまようじ症候群を避ける方法は?

パターンを/一致させると、/素早く脱出する必要があるのが扱いにくく、見苦しくなります。

/\/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に切り替える)のが一般的な回避策です。

関連情報