0

文字フィールドを置き換えたい場合は、たとえば{、 awk を使用できます。

awk '{ gsub(/{/, "<"); print }' file

...しかし、これは「{」などのフィールドも置き換えます(これは望ましくありません)。フィールド全体の完全一致のみを検索 (および置換) する awk 関数はありますか? すべてのフィールドに。

たとえば、次のようになります。

$ echo "foo bar zod \"{\" {" | awk '{ gsub(/{/, "<"); print }'

出力します:

foo bar zod "<" <

しかし、私はそれを出力したい:

foo bar zod "{" <

フィールドを明示的に繰り返し、==を使用して完全に一致するかどうかを確認することもできますが、別の方法があるかどうか疑問に思います。

4

1 に答える 1

3

==またはでチェックして、すべてのフィールドをループして、あなたが言ったことを行います/^{$/

ただし、何らかのトリックを実行すると、ループなしで実行できます: (gnu awk)

awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")'                                                                                  

この例を確認してください:

kent$ echo '{ foo "{" and this: { bar {'|awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")'
< foo "{" and this: < bar <

上記の例では、4 つのうち 3 つ{が置換されました。

于 2013-07-16T21:00:30.397 に答える