2017-11-08 7 views
0

"abc ö-Ö ä-Ä å-Å def" 문자열의 ä를 ae, aa와 ae에서 oe로 변경하고 싶습니다.sed regexp가 텍스트를 부분적으로 일관성 없게 변경하는 이유

sed -i 's/ä/ae/g' aFile | sed -i 's/å/aa/g' aFile | sed -i 's/ö/oe/g' aFile 

이 명령은 때때로 ö와 ä 및 때때로 ä 만 변경합니다. 그 명령이 때로는 다른 방법으로 다른 방법으로 작동한다는 것은 이상합니다. 그게 뭐가 잘못 되었 니?

미리

+0

입력 파일의 상당 부분을 제공 할 수 있습니까? pls는 어떤 플랫폼을 실행 중인지에 대한 자세한 정보를 제공합니다. 로케일 설정은 무엇입니까? – zefixlluja

답변

3

-i (장소 편집) 및 파이프 라인 혼합하지 않습니다. 다음 두 명령 중 하나가 작동합니다 질문에 주어진

  • sed -i -e 's/ä/ae/g' -e 's/å/aa/g' -e 's/ö/oe/g' aFile

  • sed -i 's/ä/ae/g' aFile; sed -i 's/å/aa/g' aFile; sed -i 's/ö/oe/g' aFile

  • 기본적으로

가 어떤 코드에서 일어나고있는 것은 세 sed의 모든 있다는 것입니다 병렬로 시작했으며 모두 동일한 파일을 수정하려고합니다. 결과적으로 알 수없는 행동을하게됩니다. 세 개의 파일 중 무엇이 파일에서 읽히는지 알 수 없기 때문입니다.

두 번째로 -i (편집 위치)에서 sed을 호출하면 표준 입력을 읽지 않으며 표준 출력을 작성하지 않습니다.

아, 그리고 이것은 소문자 인 [äåö] 만 처리합니다.

+0

감사합니다 .AlexP가 도움이되었습니다. – Tosh

1

당신은 하나의 과 목표를 달성 할 수있는 당신을 감사합니다 명령 나오지 :

sed -i 's/ä/ae/g; s/å/aa/g; s/ö/oe/g' aFile 
+0

Thanks @RomanPerekhrest! 실제로 나는 당신이 쓴 방법으로 문제를 해결했지만, sed의 동작은 이상했기 때문에 질문을 게시했습니다;) – Tosh