sed 정규식 찾기 및 바꾸기

sed 정규식 찾기 및 바꾸기

다음과 일치하는 모든 항목을 대체해야 하는 파일이 있습니다.

,"   "\n  to  ,"ZYY"\n
,"ZZY"\n  to  ,"ZYY"\n
,"GMZ"\n  to  ,"FPZ"\n

이 명령을 사용하려고 하는데 sed 's/," "/,"ZYY"/g' Packs.txt작동하지 않습니다.

답변1

이것은 트릭을 수행하는 것 같습니다

$ sed -E 's/,"(   |ZZY)"$/,"ZYY"/;s/,"GMZ"$/,"FPZ"/' inputfile

여기서 가장 중요한 것은 $검색하는 대신 앵커를 사용하여 줄 끝을 표시하는 것 입니다 \n.

답변2

수행해야 할 변환 모음이 있는 경우 이를 파일에 넣을 수 있습니다. 그런 다음 "-f _sed_file_"을 사용하여 모든 항목을 처리할 수 있습니다. 예를 들어 입력 파일이 다음 test.in 파일과 같은 경우:

This,"   ",is,a,test
This,too,"ZZY",is,a,test
And,so,"GMZ",is,this

다음과 같은 sed 파일이 있습니다.

s/,"   "/,"ZYY"/g
s/,"ZZY"/,"ZYY"/g
s/,"GMZ"/,"FPZ"/g

다음 명령을 실행할 수 있습니다.

sed -f test.sed test.in

다음 출력을 얻습니다.

This,"ZYY",is,a,test
This,too,"ZYY",is,a,test
And,so,"FPZ",is,this

답변3

그러면 세 문자열이 모두 원하는 대로 변경되고 변경 사항만 표준 출력으로 전송됩니다.

 sed -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

큰따옴표 사이의 문자뿐만 아니라 전체 문자열을 사용했습니다. 왜냐하면 이러한 특정 문자열이 파일의 다른 곳에 나타나는지 여부를 지정하지 않았기 때문입니다.

결과가 만족스러우면 다음 명령을 사용하여 파일 자체를 변경할 수 있습니다.

sed -i -e 's|,"   "\\n|,"ZYY"\\n|g' -e 's|,"ZZY"\\n|,"ZYY"\\n|g' -e 's|,"GMZ"\\n|,"FPZ"\\n|g' Packs.txt

관련 정보