sedまたはawkを使用して列間のテキストを置き換える

sedまたはawkを使用して列間のテキストを置き換える

次の形式のテキストを置き換える方法を見つけようとしています。

input1:input2:input3
aaa:bbb:ccc
111:222:333

私は結果が次のようになりたいと思います:

input1:new-text:input3
aaa:new-text:ccc
111:new-text:333

結果が良い場合は、sed、awk、cut、または他の何かを実行できます。

ベストアンサー1

awkは、「コロンで区切られた2番目のフィールドを」に置き換える規則を考慮して、new-textこれを非常に簡単にします。

awk -F':' 'BEGIN { OFS=FS } {$2="new-text"; print} ' < input > output

-F':'コロンを使用して各行のフィールドを区切るようにawkに指示します。

このBEGINセクションは出力後で行を再印刷するときに awk がコロンを再利用してフィールドを結合できるように、フィールド区切り文字を現在のフィールド区切り記号 (コロン) に変更します。

2番目の部分の前には条件がないので、各行が実際に実行されるのは、2番目のフィールドを次に置き換えてから、新しい行をnew-text印刷することです。

おすすめ記事