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

이는 문자열에 대해 밑줄이 아닌 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:~$

관련 정보