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]}'

関連情報