AIX の nawk は正しく /[\]]/ が処理できない2017年10月20日 12時25分40秒

awk で特定の一文字に適合するときは、[] で囲む。例えば、[ACD1] だと、A か C か D か 1 のどれかになる。] 自体をいれようとすると、awk が囲みの最後だと認識してしまうので、文字として扱わせるために、バックスラッシュで回避をする。 [)\]}>] 等として、全ての閉じ括弧を指定したりする。

どうも、AIX の nawk ではこの、] を正しくエスケープ出来ないようだ。

Solaris では問題なく ] を見付けてくれる。

solaris % echo ']' | nawk '$1 ~ /[)\]]/{print "matched", $0}' 
matched ]
solaris % echo ')' | nawk '$1 ~ /[)\]]/{print "matched", $0}' 
matched )
solaris % echo '>' | nawk '$1 ~ /[)\]]/{print "matched", $0}' 
AIX では エスケープされた ] があると、適合の式自体が誤動作するようだ。\] を除けば、) は見付けてくれるが、] は見付けようが無い。
aix % echo ']' | nawk '$1 ~ /[)\]]/{print "matched", $0}' 
aix % echo ')' | nawk '$1 ~ /[)\]]/{print "matched", $0}'
aix % echo ')' | nawk '$1 ~ /[)]/{print "matched", $0}' 
matched )
aix % echo '>' | nawk '$1 ~ /[)\]]/{print "matched", $0}' 

AIX 上でも、Solaris 上でも、awk は ] のエスケープを処理できるようだ。

aix % echo ')' | awk '$1 ~ /[)\]]/{print "matched", $0}'
matched )
しかし、Solaris 上の awk は古い物の事が多く、nawk 程の新しい構文が使えないことも多々ある。gawk が入っていれば、この両方の問題を回避できる。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2017/10/20/8709157/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。