sed는 정렬되지 않은 여러 문자열을 포함하는 줄 뒤에 추가합니다.

sed는 정렬되지 않은 여러 문자열을 포함하는 줄 뒤에 추가합니다.

sed를 사용하여 및 appendstring를 모두 포함하는 줄 뒤에 추가하려고 합니다 .HelloWorld

Hello something here World
World fsf Hello

주문을 고려하면 작동합니다.

sed -i '/Hello*World\|World*Hello/a appendstring' file

그러나 일치시킬 문자열이 많고 순서가 맞지 않으면 이는 확실히 효과적이지 않습니다.

그런 다음 순서를 고려하지 않고 두 문자열을 모두 포함하는 줄 삭제를 논의하는 다른 링크에서 솔루션을 시도했습니다.

https://stackoverflow.com/questions/28561519/delete-lines-that-contain-two-strings

하지만,

sed -i '/Hello/!b;/World/d' file

삭제해도 작동하지 않습니다.

다음은 해당 질문에 대한 답변 중 하나입니다.

sed -i '/Hello/{/World/d}' file

공장,그래서 추가해서 구현해 보았습니다. 사용:

sed -i '/Hello/{/World/a} appendstring' file

그러나 오류가 발생했습니다.

sed: -e expression #1, char 0: unmatched `{'

업데이트: 링크의 게시물에는 !b를 사용한 솔루션이 명시되어 있으며 느낌표 때문에 cshell에서는 작동하지 않았지만 sh 및 bash에서는 작동합니다. 또한 스크립트 내에서 sed를 실행할 때 많은 줄을 삽입하고 큰 단락을 추가하도록 쉽게 확장할 수도 있습니다.

sed -i '/Hello/!b; /World/a \
addline \
addanotherline ' file

답변1

당신은 거의 다음과 같은 일을 겪었습니다.

sed -i '/Hello/{/World/a} appendstring' file

주장을 분리해야 합니다. 다음과 같이 사용하세요 -e.

sed -i -e '/Hello/{/World/a appendstring' -e '}' file

다음을 사용하여개행 문자가 없는 ppend 명령은 스위치와 마찬가지로 GNU 확장입니다 -i.


이 작업을 보다 이식성 있게 수행하고 여러 문자열이 일치할 가능성도 고려하려면 다음을 시도해 보십시오.

sed '/multiple/{/words/{/to/{/match/ s/$/append this/;};};}' file > newfile
mv newfile file

이미 GNU Sed를 사용하고 있으므로 다음을 사용하세요.

sed -i -e '/multiple/{/words/{/to/{/match/ a append this' -e 'a and also this' -e 'a oh and this too' -e '};};}' file

관련 정보