マッチ後にsedが置き換えられないのはなぜですか?

マッチ後にsedが置き換えられないのはなぜですか?

text.csvというファイルがあり、その内容は次のとおりです。

小さなつま先10個

これはまさにそれです。

5 興味深い 0

1、2、3

木を2回

数字を括弧で囲んで置き換えようとしているので、予想される出力は次のようになります。

(1)(0) 小さなつま先

これはまさにそれです。

(5) 面白い(0)

1、2、3

木を2回

私はsedコマンドを次のように使用します。

sed 's/[0-9]/(&)/g' text.csv

その後、正しい出力を取得しますが、次のようにしようとします。

sed 's/[0-9]*/(&)/g' text.csv

次に、次のような出力を提供します。

(10) ()T()i()n()y()()T()o()e()s()

()T()h()i()s() ()i()s() ()T()h()a()T()

(5) ()f()u()n()n()y() (0)

()1、2、3()

()T()r()e()e() ()T()w()i()c()e()

したがって*があるというのは、直前の文字を探して(&)に置き換えなければならないという意味なのに、このようなことは起こらない。 *どこで間違っていますか?を使って検索してください。

ベストアンサー1

x*任意のシーケンスを表します。0またはそれ以上x。の略ですx\{0,\}。したがって、空の文字列とも一致します。マッチ1以上、\{1,\}拡張正規表現を有効にすると-E(一部のsed実装のみ)に短縮できます+

一般に、[0-9]ロケール、オペレーティングシステム、または実装に応じて文字と文字の間を並べ替えるすべての照合要素を意味します。09sed0123456789

だから:

sed 's/[0123456789]\{1,\}/(&)/g'

または:

sed -E 's/[0123456789]+/(&)/g'

おすすめ記事