Sed/Awk: 동일한 패턴이 여러 줄에 나타날 때 트리거됩니까?

Sed/Awk: 동일한 패턴이 여러 줄에 나타날 때 트리거됩니까?

텍스트 파일이 있다고 상상해 보세요. 이 파일에 동일한 패턴(예 <br>: )이 N 줄 연속으로 있는지 알고 싶으면 처음 3줄과 마지막 3줄을 삭제해야 합니다. 이 삭제 부분을 어떻게 해야 하는지 알 수 있을 것 같은데, 이 모달 매직을 구현하는 방법을 모르겠습니다.

시각화에 적합:

Foo <br>
Bar <br>
Baz <br>
<br>

이는 파일에서 기본적으로 일관된 패턴입니다. 그러나 때로는 나중에 파일을 적절하게 처리할 수 있도록 제거해야 하는 항목이 나타나는 경우가 있습니다.

1 Not good Foo <br>
2 <br>
3 <br>
4 <br>
5 Dirt <br>
6 <br>

줄 번호를 추가했습니다.

여러 번의 연속적인 중단이 있다는 점만 비종양성 패턴과 다릅니다. 따라서 3행에서 이것이 종양 세그먼트라는 것을 알게 되면 1행부터 6행까지 삭제해야 합니다.

따라서 결론은 다음과 같습니다. <br>행에 2개의 행이 표시될 때마다 처음 2개 행, 현재 행 및 다음 3개 행을 삭제합니다.

답변1

귀하의 요구 사항을 올바르게 읽었다면 Vim에서 파일을 열고 다음을 입력하여 원하는 결과를 얻을 수 있습니다.

:g/^<br>\n<br>$/-1,+4d

그런 다음 "Enter"를 누르십시오.

ex스크립트를 작성해야 한다면 그렇게 할 수도 있습니다.


예:

앞으로:

Some line
Not good Foo <br>
<br>
<br>
<br>
Dirt <br>
<br>
Some additional line

뒤쪽에:

Some line
Some additional line

관련 정보