sedを使用して数字を角括弧に置き換えるには?

sedを使用して数字を角括弧に置き換えるには?

次のような多くの行を含む test.txt ファイルがあります。

hello:123: world
hello:783: world
hello:479: world
......

sedコマンドを使用して次の行を置き換える方法は?

hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world
......

よろしくお願いします!

答え1

これについてどう思いますか?これがあなたに必要なものであることを願っています。

sed -e 's/\([0-9]\+\)/(\1, 0)/g'

テスト

echo "hello:123: world
hello:783: world
hello:479: world" | sed -e 's/\([0-9]\+\)/(\1, 0)/g'

結果

こんにちは: (123, 0): 世界

こんにちは: (783, 0): 世界

こんにちは: (479, 0): 世界

答え2

POSIX的に:

sed 's/[0-9]\{1,\}/(&, 0)/' < file

\{1,\}各行で、1つ以上の()10進数シーケンスの最初の項目を(&, 0)&置き換えるテキストの位置)に置き換えます。

sed一部の実装では、代替が使用可能な場合は、基本-E正規表現(BRE)の代わりに拡張正規表現(ERE)を使用することを選択できます。 POSIX仕様の次のバージョンにすることができます。+\{1,\}-E

sed -E 's/[0-9]+/(&, 0)/' < file

いくつかのsed実装(例:GNU)はBREをエイリアスとしてsedサポートしますが、これは移植可能/標準ではありません。\+\{1,\}

正規表現の新しい事実上標準となっているPerl正規表現を使用するには、次のものを使用できますperl

perl -pe 's/\d+/($&, 0)/' < file

答え3

入力に:区切られたテキストがあり、2番目の列を変更する必要があるとします。

$ awk 'BEGIN{ FS=OFS=":" } {$2 = "("$2", 0)"} 1' ip.txt
hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world

またはperl

$ perl -F: -lane '$F[1] = "($F[1], 0)"; print join ":",@F' ip.txt
hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world

関連情報