如何在通讯簿中只夹一个带括号的电子邮件地址字段?我的通讯录包括姓名、昵称、邮寄地址(csv格式(。我必须只在地址上加括号,以适应我的新邮件(MUA(的地址簿格式。我想知道如何使用sed/awk来实现这一点。MWE如下:
John,Doe,JohnDoe,john_doe@gmail.com
转换后的结果希望是这样的:
JohnDoe John Doe <john_doe@gmail.com>
我应该相信只有地址才包括at标记这一事实吗?在这种情况下,如果其他字段包含此标记,则可能会导致错误。提前感谢你的建议。
添加.csv内容:
John,Doe,JohnDoe,john_doe@gmail.com
如果您需要将"john_doe@fmail.com"
包含在<...>
中,您可以简单地执行:
awk -F, -v OFS=, '{$4="<"$4">"}1' file
然后,它将修改文件中的每个记录,在第4个字段的末尾添加"<"
和">"
,然后在末尾使用默认打印命令简写1
来输出记录。将变量OFS
(输出字段分隔符(设置为','
可确保每个输出字段用逗号分隔。
示例使用/输出
$ echo "John,Doe,JohnDoe,john_doe@gmail.com" | awk -F, -v OFS=, '{$4="<"$4">"}1'
John,Doe,JohnDoe,<john_doe@gmail.com>
不带','
分离器的输出
由于您还显示了不需要任何.csv逗号分隔符的所需输出,因此您可以简单地不更改OFS
,这将产生空格分隔的输出,例如
$ echo "John,Doe,JohnDoe,john_doe@gmail.com" | awk -F, '{$4="<"$4">"}1'
John Doe JohnDoe <john_doe@gmail.com>
重新排列字段顺序以匹配您想要的输出
正如@EdMorton所捕捉到的,你也在交换前几个字段。要完成字段重新排序和限制电子邮件地址,您可以执行以下操作:
awk -F, '{print $3, $1, $2, "<"$4">"}' file
重新排列的示例
$ echo "John,Doe,JohnDoe,john_doe@gmail.com" | awk -F, '{print $3, $1, $2, "<"$4">"}'
JohnDoe John Doe <john_doe@gmail.com>
有几种方法可以解决这个问题,但使用awk
或类似的方法可能是最有效的方法之一。
如果您还有其他问题,请告诉我。