sedを使用した文字列の変更

sedを使用した文字列の変更

フィルタを使用して次のようにプロセスリストをインポートした後:

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

長さが一定量を超えると、ロープが切断されます。その名前を使用する他のスクリプトのプロセス名の最後の部分を変更する必要があります。問題は、名前が00001で終わるということです。

私は次のことを試しました

[...]|sed 's/000/00001/g[...]

しかし、問題は明らかです。また、正しい文字列を変更します。私の質問は、他のチェーンを変更せずに0,00,000から0001に行くときにsedを使用してチェーンを正しく変更する方法はありますか?

上記のリストがあるとしましょう。

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

最初と最後の両方が正しいです。次のようなものを入手する必要があります。

FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_00001
FOO_ABCCDAA_00001
FOO_12345678_00001
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001

ありがとう

ベストアンサー1

これは、パターンスペース内の可能な最長の一致から3番目の項目を文字列の下線ではなく0個以上の文字に置き換えます。00001

 sed 's/[^_]*/00001/3' <in >out

おすすめ記事