text.txt
다음을 고려하세요 :
blablabla
&&&key word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&key word&&&
blablabla
awk
다음 출력을 얻는 정규식을 구현하고 싶습니다 .
I want all
these text and numbers 123
and chars !"£$%&
as output
저는 다음 표현을 사용하고 있습니다.
awk "$1 ~ /^[&&&key word&&&].[&&&key word&&&]/" test.txt
그러나 결과는 내가 기대했던 것과 다릅니다.
&&&key word&&&
&&&key word&&&
아마도 좋은 질문이 아닐 수도 있어서 죄송합니다. 여기에서 많은 솔루션을 시도했고 stackoverflow도 몇 가지 튜토리얼을 읽었지만 여전히 해결할 수 없습니다. 이 주제에 대한 완전한 튜토리얼도 제공해 주시면 정말 감사하겠습니다.
편집: 제안된 대로 $0을 사용하면 더 나은 결과를 얻을 수 있습니다.
awk "$0 ~ /[&&&key word&&&]/,/[&&&key word&&&]/" test.txt
결과 :
&&&key word&&&
I want all
these text and numbers 123
and chars !"£$%&
as result
&&&key word&&&
여전히 첫 번째 행과 마지막 행을 삭제해야 합니다. 조건이 비슷한지는 알지만 awk "{if (NR!=1&&NR!=-1) {print}}" text.txt
위 출력에 적용하는 방법을 모르겠습니다.
답변1
awk 'BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }' file
이는 일치하는 두 인스턴스 사이의 행만 인쇄합니다 &&&key word&&&
. 이 변수는 p
인쇄할지 여부를 결정하는 플래그로 사용됩니다. false로 시작하고(인쇄하지 않음) &&&key word&&&
입력 줄에 일치하는 항목이 있을 때마다 논리적으로 부정(반전)됩니다.
입력 행 블록이 여러 개인 경우 &&&key word&&&
해당 블록은 모두 인쇄됩니다(다른 블록은 인쇄되지 않음). 일치하는 시작 부분은 있지만 &&&key word&&&
끝 부분이 없으면 파일 끝 부분까지의 모든 후속 행이 인쇄됩니다.
산출:
I want all
these text and numbers 123
and chars !"£$%&
as output
시작 및 끝 키워드가 다른 경우(예: "START" 및 "STOP") 다음과 같이 할 수 있습니다.
awk 'BEGIN {p=0};
/START/ { p = 1 ; next };
/STOP/ { p = 0 ; next};
p { print }' file