使用sed/awk在电子邮件地址字段中添加方括号



如何在通讯簿中只夹一个带括号的电子邮件地址字段?我的通讯录包括姓名、昵称、邮寄地址(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或类似的方法可能是最有效的方法之一。

如果您还有其他问题,请告诉我。

最新更新