다음 줄에도 내용이 있으면 해당 줄을 삭제하세요.

다음 줄에도 내용이 있으면 해당 줄을 삭제하세요.

나는 샘플을 가지고 있습니다 :

This is a test
localhost% This is a test

첫 번째 항목은 This is a test다음 줄의 txt 파일에 다시 나타나며 localhost%그 앞에 몇 가지 문자가 있습니다. This is a test다음 줄에 다음과 같은 내용이 포함되어 있으면 첫 번째 줄을 삭제하고 싶습니다.<arbitrary characters>% This is a test

그래서 두 행을 확인하고 이전 행이 This is a test다음 행과 일치 하면 localhost% This is a test(참고 %) 이전 행을 삭제하고 싶습니다.

어떻게 해야 하나요?

답변1

아마도:

sed '$!N;/^\(.*\)\n.*% \1$/!P;D'

즉, with를 사용하여 sed스크롤링 2라인 패턴 공간을 처리함으로써 ( ) 뒤의 두 번째 라인 끝에서 첫 번째 라인이 발견(캡처)되면 첫 번째 라인이 삭제됩니다(인쇄하지 않고 건너뛰기( )). 그것) .ND!P\(...\)\1$"% "

이는 다음과 같은 경우에도 작동합니다.

This is a test
foo% This is a test
bar% foo% This is a test

(처음 2줄 삭제)

답변2

다음 명령을 사용할 수 있습니다

sed -i "/This is a test/s/^This is a test$//g" test && sed -i '/^$/d' test

입력 파일

고양이 테스트

This is a test
localhost% This is a test

위의 명령을 실행한 후

결과물 파일

고양이 테스트

localhost% This is a test

관련 정보