[unix] 파일에서 발생 당 여러 줄을 제거하는 방법?

이 857835 라인 파일을 가지고 다음과 같은 내용을 포함한다고 가정 해보십시오.

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

그리고 나는 모든 발행 수 제거 할 a1및 (다음 줄 rubbish1rubbish5이 예에서). 어떻게합니까?

나는 grep 'a1' -v -A1아무 소용이 없었지만 내 sed skillz는 정말 대단하지 않습니다 :}

이번에 Google fu가 나를 도와주지 못했습니다. 누군가 도와주세요!



답변

시험:

sed -e '/^a1$/,+1d' "filename"

이것은 / ^ a1 $ /에서 다음 줄로의 삭제를 의미합니다.

^와 $는 전체 행과 일치하므로 숨겨진 a1은 일치하지 않습니다.


답변

다음은 비 GNU에서 작동합니다 sed( ,+1주소 구문은 GNU 확장입니다).

sed -e '/^a1$/,/^/d' my_file >my_filtered_file

“정확하게 ‘a1’을 읽는 행에서 시작하여 행의 시작이 존재하는 다음 행 (예 : 다음 행)에서 끝나는 경우 삭제하십시오.”

다른 줄 수를 삭제하면 완전히 다른 스크립트가 필요하기 때문에 @asoundmove의 답변보다 확장 성이 떨어집니다.


답변