40

これは単純なことのように思えますが、awk gensub / gsub / subの動作は常に私にはわかりません。そして今では、ドキュメントに記載されていること(およびzillionでの経験)を実行させることができません。他の同様のツールが機能することを示唆しています)。具体的には、置換文字列の正規表現から「キャプチャされたグループ」にアクセスしたいと思います。awkの構文は次のようになります。

awk '{ gsub(/a(b*)c/, "Here are bees: \1"); print; }'

それは「abbbc」を「Herearebees:bbb」に変えるはずです。少なくとも、Ubunutu9.04ではそうではありません。代わりに、「\1」は^Aとしてレンダリングされます。つまり、コード1の文字です。もちろん、私が望むものではありません。どうすればよいですか?

ありがとう。

4

2 に答える 2

42
echo abbc | awk '{ print gensub(/a(b*)c/, "Here are bees: \\1", "g", $1);}'

gsubとgensubの違いについては、こちらのマニュアルを参照してください

于 2009-10-12T15:39:21.503 に答える
26

gawkマニュアルによる

gensubは、subまたはgsubでは使用できない追加機能を提供します。置換テキストで正規表現のコンポーネントを指定する機能です。これは、正規表現で括弧を使用してコンポーネントをマークし、置換テキストで「\ N」を指定することによって行われます。ここで、Nは1から9までの数字です。

gensubを使用する必要があり、「g」を指定する必要があります。また、gensubはインプレースで変更されないため、結果を取得する必要があります。

awk '{ r = gensub(/a(b*)c/, "Here are bees: \\1", "g"); print r; }'
于 2009-10-12T16:08:19.853 に答える