如何使用 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 

当你有引用字段时,上面是正确的,否则你应该有带有多个 RecordSeperators 的 RS。RS='[[:blank:]]*:'就像您评论中的示例一样。

答案3

reg-ex 可能需要调整才能完全符合 RFC 5322,但作为初学者,请尝试:

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

相关内容