파일에서 발생할 때마다 여러 줄을 삭제하는 방법은 무엇입니까?

파일에서 발생할 때마다 여러 줄을 삭제하는 방법은 무엇입니까?

다음 내용이 포함된 857835 라인 파일이 있다고 가정해 보겠습니다.

a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8

a1모든 항목 과 다음 줄( rubbish1이 경우)을 삭제하고 싶습니다 rubbish5. 어떻게 해야 합니까?

시도했지만 grep 'a1' -v -A1성공하지 못했고 sed 기술이 그다지 좋지 않습니다.

내 Google-fu가 이번에는 도움이 되지 않았습니다. 누군가 부탁드립니다!

답변1

노력하다:

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

/^a1$/부터 다음 줄까지 삭제한다는 의미입니다.

^ 및 $는 전체 줄과 일치하는 것이 보장되므로 숨겨진 a1은 일치하지 않습니다.

답변2

다음은 GNU가 아닌 경우에 적용됩니다 sed( ,+1주소 구문은 GNU 확장입니다).

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

"'a1'이 정확히 읽혀진 줄부터 시작해서 그 줄의 시작 부분에 존재하는 다음 줄(즉, 다음 줄)에서 끝나요."

그러나 다른 수의 행을 삭제하려면 완전히 다른 스크립트가 필요하기 때문에 @asoundmove의 답변보다 확장성이 훨씬 떨어집니다.

관련 정보