awk첫 번째 패턴 일치 뒤의 줄(포함하지 않음)

awk첫 번째 패턴 일치 뒤의 줄(포함하지 않음)

echoer화면에 많은 정보를 인쇄하는 스크립트(라고 부르겠습니다)가 있습니다 . 패턴을 찾은 후에야 선을 볼 수 있게 하고 싶습니다.

나는 사용하는 솔루션이 다음과 같을 것이라고 상상합니다.

echoer | solution_command <pattern>

이상적으로는 pattern정규 표현식이지만 하드 값 문자열이면 충분합니다.

답변1

AWK는 정규 표현식을 사용할 수 있는 패턴 범위를 사용하여 이를 수행할 수 있습니다.

echoer | awk '/pattern/,0'

echoer출력은 일치하는 첫 번째 줄부터 인쇄됩니다 pattern.

AWK는 패턴 기반이며 일반적으로 "이 패턴이 일치하면 다음을 수행하십시오" 유형의 메소드와 함께 사용됩니다. "이 패턴"은 "이 패턴이 일치하면 다른 패턴이 일치할 때까지 이 작업을 시작합니다"로 정의된 일련의 패턴일 수 있습니다. 이는 위와 같이 쉼표로 구분된 두 패턴을 작성하여 지정됩니다. 패턴은 에서와 같이 텍스트 일치일 수 있습니다. 여기서 /pattern/현재 행은 정규식으로 해석되며, 일반 표현식일 수도 있습니다. 이는 각 행에 대해 평가되어 결과가 일치하지 않는 것으로 간주됩니다. 0 또는 비어 있지 않음.

AWK에서 기본 작업은 현재 줄을 인쇄하는 것입니다.

이 모든 것을 종합하면 awk '/pattern/,0'일치하는 행을 찾고 pattern일단 발견되면 조건이 0일치할 때까지(0이 아님) 기본 작업이 모든 행에 적용됩니다. awk '/pattern/,""'작동할 것입니다.

이것고크 매뉴얼자세한 내용은.

답변2

sed@StephenKitt의 것과 강제로 동일함 awk:

sed '/pattern/,$!d'

pattern다음과 같이 해석되었습니다.기본 정규식grep(대신 에확장 정규식존재하다 awk/ egrep/ grep -E). 일부 sed구현에는 -E(BSD, ast, 최근 GNU/busybox, 곧 POSIX) 또는 -r(GNU, ssed, busybox, 일부 최근 BSD) 옵션이 있습니다.확장 정규식대신 일부는 -P(ast) 또는 -R(ssed)를 사용하여 Perl과 같은 정규식을 만듭니다.

그리고 perl:

perl -ne 'print if /pattern/ .. undef'

답변3

GNU 및 *BSD grep 사용:

grep -A1000000000 pattern file

파일이 1M 라인을 초과하지 않는 한 그게 전부입니다.

답변4

awk첫 번째 패턴 일치 뒤의 줄(포함하지 않음)

트리거 패턴을 포함하는 행이 "CUT HERE"와 동일하면 인쇄 출력에서 ​​생략할 수 있습니다.

echoer | awk 'flag ; /pattern/ { flag=1 }'

각 입력 줄은 awk 코드의 두 구성 요소를 통과합니다. 첫 번째 구성 요소는 flagawk가 " flag변수가 0이 아닌 경우 이 줄을 인쇄합니다"로 해석됩니다. awk 변수의 기본값은 0이므로 처음에는 아무것도 인쇄되지 않습니다.

두 번째 구성 요소 /pattern/ { flag=1 }는 패턴을 감지하자마자 플래그를 1로 설정하고 플래그는 나머지 실행 동안 해당 값을 유지합니다.

패턴이 처음 감지되면 해당 입력 줄을 인쇄할 수 있는 기회가 지난 것입니다. 이후의 모든 라인(패턴을 포함하는 다른 라인 포함)이 인쇄됩니다.

관련 정보