메일 로그에 대해 다음 정규식 패턴을 인쇄하려고 합니다. 특히 대괄호 사이에서 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