如何解决使用sed / awk将括号添加到电子邮件地址字段
如何在通讯录中仅将带有括号的电子邮件地址字段夹在中间?我的通讯簿包含姓名,姓氏,昵称,邮寄地址(csv格式)。我只能在地址中添加方括号,以适应新邮件(MUA)的地址簿格式。我想知道如何用sed / awk实现它。 MWE如下:
John,Doe,JohnDoe,john_doe@gmail.com
希望转换后的结果像这样:
JohnDoe John Doe <john_doe@gmail.com>
我应该依靠这样一个事实,即只有地址包括at-mark吗?在这种情况下,如果其他字段包含此标记,则可能会导致错误。预先感谢您的建议。
解决方法
添加了.csv内容:
John,Doe,JohnDoe,john_doe@gmail.com
您需要将"john_doe@fmail.com"
括在<...>
中,只需执行以下操作:
awk -F,-v OFS=,'{$4="<"$4">"}1' file
然后,在最后使用默认打印命令速记"<"
来输出记录之前,哪个将修改文件中的每个记录,并在第四个字段的末尾添加">"
和1
。将变量OFS
(输出字段分隔符)设置为','
可确保每个输出字段都用逗号分隔。
使用/输出示例
$ echo "John,john_doe@gmail.com" | awk -F,'{$4="<"$4">"}1'
John,<john_doe@gmail.com>
没有','
分隔符的输出
由于您还显示了不带任何.csv逗号分隔符的所需输出,因此您无法更改OFS
,而将产生以空格分隔的输出,例如
$ echo "John,'{$4="<"$4">"}1'
John Doe JohnDoe <john_doe@gmail.com>
重新排列现场订单以匹配所需的输出
抓住@EdMorton时,您也在交换前几个字段。要完成字段重新排序并设置电子邮件地址的上限,您可以执行以下操作:
awk -F,'{print $3,$1,$2,"<"$4">"}' file
示例已重新排列
$ echo "John,"<"$4">"}'
JohnDoe John Doe <john_doe@gmail.com>
有几种方法可以解决此问题,但与此同时使用awk
或类似方法可能是最有效的方法。
如果您还有其他问题,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。