使用sed或awk删除空格后跟任何直到逗号

时间:2016-12-06 22:14:18

标签: bash perl awk sed gawk

我的文件包含以下逗号分隔值

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,,

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

我试过

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

但没有人赞成。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:3)

首先,^表示行首。删除它。

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

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

答案 1 :(得分:1)

awk '{gsub(/[ ]+/,"")gsub(/[0,3-8]/,"")}1' file

第一个gsub会移除空间,下一个gsub会删除不需要的数字。

答案 2 :(得分:1)

perl解决方案:

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

Perl的启动成本高于Sed's或Awk's,但Perl更强大的正则表达式支持通常会让事情变得更容易:

  • \s是匹配空格的便捷快捷方式(制表符,空格,换行符);同样,\d[0-9]的快捷方式。

  • +因为一个或多个实例重复符号始终可用,而要在sed中使用 portably ,您必须使用它笨拙的\{1,\}构造。

  • (?=...)是一个前瞻性断言,允许查找子表达式而不将其包括在匹配中。