我正在尝试重组文本文件,该文本文件的电子邮件地址符合电子邮件标准。
输入
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,但是它一直失败。
答案 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>
(顺便说一句,我决定我也要给拳头起名字;;)