Bash 使用sed或awk删除后跟任何逗号的空格

Bash 使用sed或awk删除后跟任何逗号的空格,bash,perl,awk,sed,gawk,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

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

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
但没有什么是有利的


任何帮助都将不胜感激

首先,
^
表示开始。移除它

其次,您似乎希望删除每个空格和下面的逗号之间的所有非逗号,但您没有将其包含在模式中

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

首先,
^
表示行的开头。移除它

其次,您似乎希望删除每个空格和下面的逗号之间的所有非逗号,但您没有将其包含在模式中

sed -i 's/[[:space:]][^,]*,/,/g' sample.file
第一个gsub删除空间,下一个gsub删除不需要的数字


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

A
perl
解决方案:

perl -i -pe 's/\s+\d*(?=,)//g' file
Perl的启动成本高于Sed或Awk,但Perl更强大的正则表达式支持通常使事情更容易:

  • \s
    是匹配空白(制表符、空格、换行符)的便捷快捷方式;类似地,
    \d
    [0-9]
    的快捷方式

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

  • (?=…)
    是一个先行断言,它允许查找子表达式而不将其包含在匹配中


A
perl
解决方案:

perl -i -pe 's/\s+\d*(?=,)//g' file
Perl的启动成本高于Sed或Awk,但Perl更强大的正则表达式支持通常使事情更容易:

  • \s
    是匹配空白(制表符、空格、换行符)的便捷快捷方式;类似地,
    \d
    [0-9]
    的快捷方式

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

  • (?=…)
    是一个先行断言,它允许查找子表达式而不将其包含在匹配中


您想删除诸如
80
之类的数字吗?是的,我只想看到URL,不想看到portnumbers.sed-I的/[:space:][^,]*,/,/g'这个解决方案对我很有效,但是如果我的文件有一行,比如B c,dev.visualwebsiteoptimizer.com 80,versioncheck-bg.addons.mozilla.org 80,我只想删除数字,但此解决方案对于后跟空格的所有值都是通用的,直到我尝试使用's/[[:space:][^[[0-9]*],]*,/,/g',我不确定,这里出了什么问题。是否也要删除
80
之类的数字?是的,我只想看到URL,不想看到端口号。sed-I's/[:space:][^,]*,/,/g'这个解决方案对我来说很有效,但是如果我的文件有一行,比如B c,dev.visualwebsitepimizer.com 80,versioncheck-bg.addons.mozilla.org 80,我只想删除数字,但是这个解决方案对所有后跟空格的值都是通用的,直到我尝试了使用's/[:space:][^[[0-9]*],]*,/,/g',我不确定,这里出了什么问题。谢谢你的时间,这对我都没有帮助。我正在寻找删除空格和空格后的数字“这对我没有帮助”,修复。
*
被意外遗漏了。//关于“我正在寻找删除空格和数字后面的空格”,如果问题是错误的,请修复它。非常感谢。。你能给我解释一下吗,这对我的理解会更有帮助?我已经解释了每一个变化!我删除了
^
,因为您不想匹配行首,我将
[:space:]*
更改为
[:space:][^,]*
,因为您想匹配空格和逗号之间的垃圾。在vim中没有这种方法,因为
[^0-9,]
表示“数字或逗号以外的字符”。///如果您的问题需要更新,请更新。不要在评论中发布编辑。或者,如果你问了一个新问题,同样不要把它作为评论发表。谢谢你的时间,这对我都没有帮助。我正在寻找删除空格和空格后的数字“这对我没有帮助”,修复。
*
被意外遗漏了。//关于“我正在寻找删除空格和数字后面的空格”,如果问题是错误的,请修复它。非常感谢。。你能给我解释一下吗,这对我的理解会更有帮助?我已经解释了每一个变化!我删除了
^
,因为您不想匹配行首,我将
[:space:]*
更改为
[:space:][^,]*
,因为您想匹配空格和逗号之间的垃圾。在vim中没有这种方法,因为
[^0-9,]
表示“数字或逗号以外的字符”。///如果您的问题需要更新,请更新。不要在评论中发布编辑。或者,如果你要问一个新问题,同样不要将其作为评论发布。请为非awk大师详细解释请为非awk大师详细解释