删除空间以重组电子邮件地址

时间:2019-02-28 16:25:49

标签: bash awk sed

我正在尝试重组文本文件,该文本文件的电子邮件地址符合电子邮件标准。

输入

fistname1 lastname1 <  email@domain1.com  >
fistname2 lastname2 othername2 <  email@domain2.com  >
fistname3 lastname3 could be more than one name <  email@domain3.com  >

所需的输出

fistname1 lastname1 <email@domain1.com>
fistname2 lastname2 othername2 <email@domain2.com>
fistname3 lastname3 could be more than one name <email@domain3.com>

我尝试了一些awk,但是它一直失败。

2 个答案:

答案 0 :(得分:3)

使用sed,您可以这样做:

sed -E 's/<[[:blank:]]*([^[:blank:]]+)[[:blank:]]*>/<\1>/g' file

fistname1 lastname1 <email@domain1.com>
fistname2 lastname2 othername2 <email@domain2.com>
fistname3 lastname3 could be more than one name <email@domain3.com>

::命令详细信息::

匹配:

  • <:匹配<
  • [[:blank:]]*:匹配0个或多个空格
  • ([^[:blank:]]+):匹配1个以上非空白字符并捕获到组#1
  • [[:blank:]]*:匹配0个或多个空格
  • >:匹配>

替换:

  • <\1>:替换为由#{1}和<包裹的#1组的反向引用

答案 1 :(得分:0)

尝试使用sed的{​​{1}}扩展模式匹配。更容易阅读。

-E

如果文件很大,则可以节省一些时间来完成所有操作

sed -E 's/<\s+/</; s/\s+>/>/;' file
fistname1 lastname1 <email@domain1.com>
fistname2 lastname2 othername2 <email@domain2.com>
fistname3 lastname3 could be more than one name <email@domain3.com>

(顺便说一句,我决定我也要给拳头起名字;;)