다음을 포함하는 줄(줄 번호의 첫 번째 항목) ---
뒤의 줄 번호에 나타나는 줄을 삭제하는 방법은 무엇입니까?# 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개 이상의 대시와 일치하면 실제 줄을 건너뜁니다.