
sed를 사용하여 및 appendstring
를 모두 포함하는 줄 뒤에 추가하려고 합니다 .Hello
World
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