
다음과 일치하는 모든 항목을 대체해야 하는 파일이 있습니다.
," "\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