패턴과 일치하는 "\" 연속 행을 삭제하려면 "sed"를 사용하십시오.

패턴과 일치하는 "\" 연속 행을 삭제하려면 "sed"를 사용하십시오.

다음 파일이 있습니다.

fff
ff
test 23 34 \
    45 44
rrr
bbb

이 파일에서 일치하는 줄을 제거하고 싶지만 test줄 바꿈을 이스케이프하여 줄이 계속되고 \다음 줄은 해당 줄에 속하는 것으로 간주되어야 합니다.

내가 명령을 실행하면

sed "/test/Id" file

test해당 행에 속하는 다음 행을 포함하는 행만 삭제됩니다 .

\-continued 그룹에 속한 모든 행을 삭제하는 방법은 무엇입니까 ?

답변1

test일치 후 패턴 끝에 a가 더 이상 없을 때까지 줄을 누적한 다음 패턴 공간을 삭제하는 루프를 입력합니다 .\

$ sed '/test/{:a; /\\$/N; ta; d;}' file
fff
ff
rrr
bbb

답변2

에서 이 작업을 수행하는 방법을 모르지만 sed다음 awk프로그램은 작동해야 합니다.

awk 'f{f--} /test/{f=1} (f && /\\$/){f=2} !f' file.txt
  • f현재 줄이 패턴과 일치하면 플래그가 1로 설정됩니다.
  • 이 플래그가 설정되고 행이 a로 끝나는 경우 2 \로 증가됩니다 f.
  • f현재 행은 평가 결과가 0(즉, true)인 경우에만 인쇄됩니다 !f.
  • 플래그가 줄의 시작 부분에 설정되면 1씩 감소됩니다. 그래서,선험적으로직접 일치하는 행만 삭제됩니다. 개행으로 인해 증가하면 f현재 줄은 여전히 ​​제외된 것으로 표시됩니다. 2해당 줄도 계속되면 다음 줄도 계속 표시되도록 f다시 설정됩니다 .2

노트불행하게도 이는 일치하는 패턴이 다음 위치에 있는 경우에만 작동합니다.첫 번째그룹을 계속하는 라인.

답변3

GNU 사용sed

$ sed -Ez 's/test[^\n]*(\n|\\\n[^\n]*\n)//' input_file
fff
ff
rrr
bbb

관련 정보