awk를 사용하여 검색 매개변수가 발견된 후에만 인쇄를 시작하고 그 뒤에 있는 몇 개의 열만 인쇄하는 방법을 찾으려고 합니다.
더 잘 설명하기 위해 많은 정보를 한 줄에 인쇄하는 로그 파일을 보고 있습니다. 나는 단지 그 경로의 일부 측면을 취하고 추정하고 싶습니다. IE에는 다음 줄을 포함하는 대용량 파일이 있습니다.
어쩌고저쩌고, 여기에 John Doe라는 이름에 관한 많은 정보가 있는데, 계속해서 멈추지 않을 것입니다.
이름을 검색하여 인쇄하고 싶습니다.
이름: 존 도우
열 세그먼트를 사용할 수 있다는 것을 알고 있지만 실제로는 다른 파일에서 행 이름이 어디에 있는지 모릅니다.
답변1
가장 간단한 대답에는 그런 것이 포함되지 않습니다 awk
. , 를 사용하여 grep
"name"이라는 단어와 그 뒤에 최대 두 단어가 나오는 경우를 출력합니다.
grep -o 'name [A-Za-z]* [A-Za-z]*' filename
스위치에는 -o
전체 행이 아닌 일치하는 부분만 포함되며 [A-Za-z]*
단어를 요청하고 있음을 나타냅니다.
이 작업을 원하시면 알려주세요 awk
. 하지만 이 작업은 훨씬 더 복잡합니다.
답변2
이 작업은 다음을 통해 수행할 수도 있습니다 awk
.
$ awk 'match( $0, /name [A-Z][a-z]* [A-Z][a-z]*/ ) { print substr( $0, RSTART, RLENGTH ) }' /path/to/inputfile
답변3
진주해결책:
perl -lne '/(name:\s+\w+\s+\w+)/ and print $1'
\s
공백 문자 일치(뷰별 공백, 테이블 등)\w
문자와 숫자 일치-lne
print를 사용할 때를 제외하고 아무것도 인쇄하지 않음(n)을 의미하며 끝에 개행 문자(l)를 출력하고 다음을 실행합니다(e).
따라서 전체 줄은 이름과 일치합니다. 그 뒤에는 하나 이상의 공백 문자와 하나 이상의 문자, 하나 이상의 공백 문자와 하나 이상의 문자가 오고 인쇄됩니다.