awk -F를 사용하여 표현식으로 특정 필드를 인쇄하는 방법은 무엇입니까?

awk -F를 사용하여 표현식으로 특정 필드를 인쇄하는 방법은 무엇입니까?

파일에서 이메일 주소만 인쇄하려고 합니다. 파일 형식은 다음과 같습니다.

{"12":"34","email":"[email protected]","firstname":"john","lastname":"smith","text":"0","sig":"js","..":"2017-08-23"}

awk -F를 사용하여 어떻게 추출할 수 있나요? 따라서 awk -F'"' '{print $8}'를 사용할 수 있지만 열 8이 항상 이메일 주소가 아닐 수도 있습니다.

"@" 정규식에 awk -F를 사용할 수 있는 방법이 있나요? 또는 구분 기호의 모든 텍스트를 별도의 줄에 인쇄하고 grep '@'로 파이프하십시오.

감사해요

답변1

JSON 데이터를 구문 분석/조작하는 데 적합한 도구입니다.

jq '.email' jsonfile

산출:

"[email protected]"

답변2

이것은 한 가지 awk방법입니다.

awk -v RS=\" '/@/' infile.txt 

위의 내용은 참조 필드가 있을 때 정확합니다. 그렇지 않으면 여러 RecordSeperator가 있는 RS가 있어야 합니다. RS='[[:blank:]]*:'귀하의 의견의 예와 같습니다.

답변3

reg-ex가 RFC 5322를 완전히 준수하려면 조정이 필요할 수 있지만 초보자라면 다음을 시도해 보십시오.

awk '{match($0,"[a-zA-z0-9._%+-]+@[a-zA-z0-9._%+-]",a)}END{print a[0]}'

관련 정보