使用 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[...]

但問題是顯而易見的。它也會改變正確的字串。我的問題是,有一種方法可以使用 sed 在鏈從 0,00,000 到 0001 時正確進行更改,而不改變其他鏈?

假設我有上面的列表:

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

這將用字串的 0 個或多個非下劃線字元替換最長可能匹配的模式空間中的第三次出現00001

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

答案2

最後

virt01@virt01:~$ sed 's/_0*$/_00001/g' some.txt
somestring_oooo_00001
somestring_oooo_00001
somestring_oooo_00001
virt01@virt01:~$

完全適合您的數據

virt01@virt01:~$ cat some.txt
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_0000
FOO_ABCCDAA_00
FOO_12345678_0
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
virt01@virt01:~$ sed 's/_0*$/_00001/g' some.txt
FOO_AAAAA_00001
FOO_BBBBB_00001
FOO_ABABAB_00001
FOO_ABCCDAA_00001
FOO_12345678_00001
FOO_JJJ_00001
FOO_VLLLL_00001
FOO_KKAKAA_00001
virt01@virt01:~$

相關內容