다른 패턴 뒤에 나타나는 패턴으로 시작하는 전체 줄을 제거합니다.

다른 패턴 뒤에 나타나는 패턴으로 시작하는 전체 줄을 제거합니다.

다음을 포함하는 줄(줄 번호의 첫 번째 항목) ---뒤의 줄 번호에 나타나는 줄을 삭제하는 방법은 무엇입니까?# Match


편집하다:

#Match로 시작하는 행과의 관계는 ---후자가 이전이나 이후에 존재할 수 있지만 #Match이후에 존재할 경우에만 제거해야 한다는 것입니다 #Match. –

입력 샘플

hello

this is sample
--- sdafasdf
adsafasf
asfas
fasf

#Match
this is sample
adsafasf
asfas    dafasf
------ lots of fun
---- test

adsfasf****

예상 출력

hello

this is sample
--- sdafasdf
adsafasf
asfas
fasf

#Match
this is sample
adsafasf
asfas    dafasf

adsfasf****

답변1

귀하의 질문에 따라 방금 이 text.txt를 만들었습니다. 파일 내용이 다를 경우 알려주세요.

bash-4.1$ cat test.txt
#Match
---- test
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ funny
------ lots of fun
#Match
dafasf
adsfasf

bash-4.1$ awk '/#Match/ {flag=1} flag && /^---/ {flag=0;next} 1' test.txt
#Match
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ lots of fun
#Match
dafasf
adsfasf

답변2

사용 sed:

sed -e '/#Match/ {n; /^---/d; }' infile

n명령은 입력의 다음 라인을 패턴 공간으로 읽고 로 시작하고 이전 라인이 일치하는 경우에만 /^---/d해당 라인을 삭제합니다 .---#Match

답변수정된 질문:

sed -e '/#Match/,$ { /^---/d; }' infile

답변3

어때요?

awk '/#Match/,EOF {if (/^---/) next} 1' file

#Match변수가 true가 될 때까지 (결코 발생하지 않으므로 = 입력 스트림의 끝) 한 줄에서 일치하는 것으로 시작하고 EOF, 처음에 3개 이상의 대시와 일치하면 실제 줄을 건너뜁니다.

관련 정보