![특정 문자열이 포함된 행 1개만 삭제하는 방법](https://linux55.com/image/205225/%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%ED%96%89%201%EA%B0%9C%EB%A7%8C%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
안녕하세요 질문이 있습니다. 여기저기 검색해 보았지만 찾을 수 없습니다.
sed 명령을 사용하여 특정 문자열이 포함된 줄을 삭제하고 싶습니다. 텍스트 파일에는 동일한 문자열이 포함된 줄이 더 있습니다. sed 명령은 첫 번째 문자열만 삭제하고 나머지는 삭제하지 않아야 합니다. 어떻게 해야 하나요? 동일한 문자열이 부족해질 때까지 여러 번 활성화되는 쉘 스크립트에서 이것을 사용하겠습니다.
예를 들어 다음 줄이 있습니다.
aaa
aaa
aaa
bbb
ccc
행 1개만 삭제하고 싶어요 aaa
답변1
더 간단한 것은 다음과 같습니다 awk
.
awk '!/aaa/ || n++' < your-file
현재 레코드가 포함되어 있지 않으면 인쇄 aaa
하거나, 포함되어 있으면 일부 카운터를 0이 아닌 값으로 사후 증가시킵니다(첫 번째 발생 이후에 발생합니다).
GNU를 사용하면 sed
다음을 수행할 수 있습니다.
sed '0,/aaa/{//d}' < your-file
aaa
파일의 시작 부분부터 처음 나타나는 줄까지의 줄 범위에 속하는 줄만 삭제합니다 aaa
.
보다sed FAQGNU가 아닌 sed에 대해 가능한 다른 방법.