AWK는 정규식 패턴을 인쇄합니다.

AWK는 정규식 패턴을 인쇄합니다.

메일 로그에 대해 다음 정규식 패턴을 인쇄하려고 합니다. 특히 대괄호 사이에서 ID를 얻으려고 합니다(참조를 위해 두 번째 줄 참조).

Mar 29 03:48:13 mx-150 clamsmtpd: 14114F: accepted connection from: 127.0.0.1
Mar 29 03:48:13 mx-150 postfix/smtpd[7445]: connect from unknown[127.0.0.1]
Mar 29 03:48:13 mx-150 spamd[15674]: prefork: child states: II

다음 명령을 사용하십시오.

awk '/\[\d+\]/ { print }' maillog

~에 따르면https://regex101.com/r/pL7kN2/11개의 일치 항목을 얻었지만 awk는 아무것도 반환하지 않습니다. 왜 그런 겁니까?

답변1

perl( 정규식 대신) 표준 정규식을 사용해 보세요 . 그러면 일치하는 줄이 인쇄됩니다.

awk '/\[[[:digit:]]+\]/ { print }' maillog

괄호 안에 일치하는 값을 추출하고 인쇄하려면 다음을 수행하십시오.

awk 'match($0,/\[[[:digit:]]+\]/) { print substr($0,RSTART+1,RLENGTH-2)}' maillog

답변2

또 다른 방법:

awk -F'[][]' 'NR>1{print $2}' maillog
7445
15674

답변3

다음 스크립트가 마음에 들면 awk문자열이 [](내부를 의미)로 나누어지면 다른 모든 필드를 인쇄하십시오.

awk -F [][] '{for(i=2;i<=NF;i+=2)print $i}' maillog

grep하지만 더 간단한 방법으로 동일한 작업을 수행하세요.

grep -o '\[[^]]*\]' maillog

답변4

무엇과 페어링하고 싶은지에 따라 다릅니다.

awk -F"[][]" '/postfix|spamd/{print $2}' maillog

관련 정보