使用sed将匹配括在双引号

时间:2015-12-11 19:51:38

标签: unix sed

我试图从电子邮件中提取标头并从中创建JSON片段。我使用sed来提取密钥和值,但它没有在每一行上添加尾随引用:

$ cat email1 | grep -i -e "^subject:" -e "^from:" -e "^to:" | \
    sed -n 's/\^([^:]*\):[ ]*\(.*\)$/"\1":"\2"/gp'

"From":"Blah Blech <blah.blech@blahblech.com>
"To":"foo@bar.com
"Subject":"Yeah

我不明白为什么替换模式不起作用。

2 个答案:

答案 0 :(得分:0)

要求救援!

 $ awk -F": *" -vOFS=":" -vq="\"" 'tolower($0)~/^from|to|subject/
                                   {print q$1q,q$2q}' email1

还结合了catgrep步骤。

答案 1 :(得分:0)

剥离回车符@tripleee建议修复sed问题(使用ctrl -v ctrl-m捕获文字回车):

$ cat email1 | tr -d '^M' | grep -i -e "^subject:" -e "^from:" -e "^to:" | \
    sed -n 's/^\([^:]*\):[ ]*\(.*\)$/"\1":"\2"/gp'

"From":"Blah Blech <blah.blech@blahblech.com>"
"To":"foo@bar.com"
"Subject":"Yeah"