拆除白色空间,然后使用sed或尴尬的任何直到逗号



我的文件具有以下逗号分离值

dev.visualwebsiteoptimizer.com       80,versioncheck-bg.addons.mozilla.org   80,     ,frontweb-stg.shoprunner.com    443,p.typekit.net       443,sra.s-9.us  443,www.shoprunner.com     443,cdn.optimizely.com  443,logx.optimizely.com 443,sra.s-9.us  443,ocsp.digicert.com   443,code.jquery.com     443,ocsp2.globalsign.com        443,dev.visualwebsiteoptimizer.com 443,versioncheck-bg.addons.mozilla.org  443,    ,

我看到的几个地方空间,然后是逗号

我想拥有以下输出:

dev.visualwebsiteoptimizer.com,versioncheck-bg.addons.mozilla.org,,frontweb-stg.shoprunner.com,p.typekit.net,sra.s-9.us,www.shoprunner.com,cdn.optimizely.com,logx.optimizely.com,sra.s-9.us,ocsp.digicert.com,code.jquery.com,ocsp2.globalsign.com,dev.visualwebsiteoptimizer.com,versioncheck-bg.addons.mozilla.org,,

理想情况下,我想删除whitespaces,直到看到逗号,

我尝试了

sed -i 's/^[[:space:]]*,/,/g' sample.file

,但没有任何偏爱。

任何帮助都将不胜感激

首先, ^表示线路的开始。删除它。

其次,您似乎要删除每个空间和以下逗号之间的所有非官方,但是您没有将其包含在模式中。

sed -i 's/[[:space:]][^,]*,/,/g' sample.file
awk '{gsub(/[ ]+/,"")gsub(/[0,3-8]/,"")}1' file

第一个GSUB删除了空间,下一个gsub占据了不良数字。

perl解决方案:

perl -i -pe 's/s+d*(?=,)//g' file

Perl的启动成本高于SED或AWK的成本,但Perl的强大正则表达支持通常会使事情变得更容易:

  • s是匹配空格的方便快捷方式(TAB,SPACE,NEWLINE);同样,d[0-9]的快捷方式。

  • +作为单一或命令的复制符号,始终可用,而要在 sed中使用 portable ,您必须使用尴尬的{1,}构造。

  • (?=...)是一种审视的断言,可以在不包括在比赛中的情况下寻找子表达。

相关内容

最新更新