在Sed中匹配之间添加空格

时间:2016-09-10 05:19:55

标签: linux sed

8167656.COMTXSFR.COMXYSJZT.NET256079.COMG-BEI.NET256702.COM516073.COMWBMSR.COMWCRHC.COMWBRZD.COMWCFGR.COM571095.COM5770879.COMWBRTK.COMYWRTF.COMDZJZPX.COM5770819.COMSFCZH.COM8733918.COMHSPCF.COMSFXHT.COMXJFPX.COMWCRGT.COMWCKYR.COMWBRHM.COMWBRYG.COMWCRGX.COMFXTMY.COM1313661.COMBKRQC.COMBKSQC.COMBLLQC.COM6880797.COMWCKKR.COMWCJKR.COM516097.COMFPCYS.COMDKDZS.COMWIN2010.NETSFMWM.COMFSHUAYUE.NET001DAO.NETEXQUISITEGIFT.NETBANTLN.COMW363888.NET8848K.NETV6789.COMSZJIAHUA.NETICJY.NETSUPVAR.NETHUALINONLINE.NE

这是我正在使用的一个例子。我需要在(COM|NET|INFO)之后添加一个空格,以便域可读。我尝试了几种不同的方法,但似乎无法让它发挥作用。正则表达式应该是(\.INFO|\.COM|\.NET)对吗?

2 个答案:

答案 0 :(得分:1)

尝试以模式转义管道:

sed 's/\(INFO\|COM\|NET\)/& /g' file

答案 1 :(得分:0)

sed使用POSIX Basic正则表达式,在BRE中使用更改(|)是一种非便携式扩展。

在这种情况下,要替换多个单词,每个单词需要替换(s)命令:

sed 's/\.INFO/& /g;s/\.COM/& /g;s/\.NET/& /g'

&代替了整场比赛。

虽然更简洁的解决方案是使用awk,它支持扩展正则表达式,并且通过扩展,更改:

awk '{gsub(/\.(INFO|COM|NET)/, "& ")}1'