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 코드의 두 구성 요소를 통과합니다. 첫 번째 구성 요소는 flag
awk가 " flag
변수가 0이 아닌 경우 이 줄을 인쇄합니다"로 해석됩니다. awk 변수의 기본값은 0이므로 처음에는 아무것도 인쇄되지 않습니다.
두 번째 구성 요소 /pattern/ { flag=1 }
는 패턴을 감지하자마자 플래그를 1로 설정하고 플래그는 나머지 실행 동안 해당 값을 유지합니다.
패턴이 처음 감지되면 해당 입력 줄을 인쇄할 수 있는 기회가 지난 것입니다. 이후의 모든 라인(패턴을 포함하는 다른 라인 포함)이 인쇄됩니다.