특정 문자열이 포함된 행 1개만 삭제하는 방법

특정 문자열이 포함된 행 1개만 삭제하는 방법

안녕하세요 질문이 있습니다. 여기저기 검색해 보았지만 찾을 수 없습니다.

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에 대해 가능한 다른 방법.

관련 정보