필터를 사용하여 다음과 같이 프로세스 목록을 가져온 후:
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
이는 패턴 공간의 가능한 가장 긴 일치 항목에서 세 번째 항목을 문자열의 밑줄이 아닌 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:~$