다음 내용이 포함된 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의 답변보다 확장성이 훨씬 떨어집니다.