1
다음과 같이 실패하는 try 패턴의 시작 범위 또는 경계를 설정하기 위해 awk를 얻는 방법
$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'
a
b
c
end
e
f
g
패턴이 작동하기 때문에 이는 모든 사람에게 적용됩니다.
$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '/b/,/end/ {print $0}'
b
c
end
하지만 다시 질문으로 돌아가서 패턴이 시작되는 범위 또는 경계를 얻는 방법은 무엇입니까?
답변1
2행과 4행 사이에 선을 추가하려면 다음을 수행하세요.
awk 'NR ==2, NR == 4' file
목적이 과 regex1
사이의 줄을 얻는 regex2
것이라면 NR 표현식을 정규식으로 바꿀 수 있습니다.
awk '/regex1/, /regex2/' file
더 자세한 형태는 다음과 같습니다.
awk '$0 ~ /regex1/, $0 ~ /regex2/ { print $0}' file
~처럼다른 답변제안전체 줄 문자열 일치위의 표현은 이 명령에서 나온 것입니다. 이 답변은 읽기에 설득력이 있습니다.
awk '$0 == "b", $0 == "end" { print $0}' file
awk '/b/, /end/' file
당신이 얻고 싶은 것을 위해.
이제 NR 표현식과 정규 표현식을 유지하는 두 가지를 결합할 수 있습니다.
awk '/b/, NR == 4' file
또는
awk 'NR == 2, /end/' file
echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'
awk
이 명령에서는 라인 1(레코드 수가 1일 때, 즉 NR == 1)에서 시작해야 한다고 알려야 합니다 .
이것은:
echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk 'NR == 1,/end/ {print $0}'
이것은 작동합니다.
답변2
그건:
awk 'NR==1, /end/'
파일의 시작 부분(첫 번째 줄부터 시작)부터 패턴이 포함된 줄까지 인쇄하는 것을 의미합니다.end
. 알아채다{print $0}
(또는 약어 print
)는 여기서 선택 사항입니다.
주문에 문제가 있나요?
with awk '1,/end/{ print $0 }'
, 실제로 이 명령은 awk '1 || /end/ {print $0}'
두 부분으로 구성됩니다.
- 항상 입력 행의 항상 참인 조건을 출력합니다.
/end/
패턴과 일치하는 줄만 인쇄하는 정규식end
이보다 우선순위가 높은 조건이 있는 경우 이는 중복됩니다. 명령은 실제로awk 1
({ print $0 }
위에서 언급한 대로 선택 사항)로 단축될 수 있습니다.
...모든 라인이 출력됩니다.
시작점이 항상 첫 번째 줄이라면 이렇게 작성하고, 나타나면 바로 종료할 수도 있습니다.end
파일의 나머지 부분을 불필요하게 읽지 않도록 패턴을 찾으십시오.
awk '/end/{ print; exit }1' ##or
awk '{ print } /end/{ exit }' ##or
awk '1; /end/{ exit }'
그리고 인쇄에서 패턴 자체를 제외합니다.
awk '/end/{ exit } { print }' ##or
awk '/end/{ exit }1'
동일한 작업을 수행하되 다음과 같은 패턴을 일치시키세요.끈정규식과 전체 줄 문자열 일치를 사용하는 대신 다음을 수행할 수 있습니다.
awk 'NR==1, $0=="end"'
바라보다패턴과 일치하는 텍스트를 찾는 방법은 무엇입니까?추가 매칭 옵션을 확인하세요.