나는 샘플을 가지고 있습니다 :
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라인 패턴 공간을 처리함으로써 ( ) 뒤의 두 번째 라인 끝에서 첫 번째 라인이 발견(캡처)되면 첫 번째 라인이 삭제됩니다(인쇄하지 않고 건너뛰기( )). 그것) .N
D
!
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