删除空格直到我们找到逗号,但这应该开始在文件的每一行中跳过第一个逗号

时间:2016-12-07 18:04:34

标签: perl awk sed gawk

我正处于sed和awk命令的学习阶段,尝试了一些复杂的逻辑,但无法获得以下解决方案。

文件内容:

This is apple,apple.com  443,apple2.com  80,apple3.com      232,
We talk on 1 banana,banana.com   80,banannna.com 23,
take 5 grape,grape5.com 23,

当我尝试

$ cat sample.txt | sed -e 's/[[:space:]][^,]*,/,/g'
,apple.com,apple2.com,apple3.com,
,banana.com,banannna.com,
,grape5.com,

没问题,但是我想跳过这个sed作为每一行的第一个逗号,所以期望的输出是

This is apple,apple.com,apple2.com,apple3.com,
We talk on 1 banana,banana.com,banannna.com,
take 5 grape,grape5.com,

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

如果您使用GNU sed,则可以执行类似

的操作
sed -e 's/[[:space:]][^,]*,/,/2g' file

其中2g指定的内容类似于从2nd出现开始替换,g用于在其余出现次数之后进行替换。

上述命令的输出。

sed -e 's/[[:space:]][^,]*,/,/2g' file
This is apple,apple.com,apple2.com,apple3.com,
We talk on 1 banana,banana.com,banannna.com,
take 5 grape,grape5.com,

man page of GNU sed

的摘录
  

克   将替换应用于正则表达式的所有匹配,而不仅仅是第一个。

     

数   只替换正则表达式的numberth匹配。

答案 1 :(得分:0)

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

    This is apple,apple.com,apple2.com,apple3.com,
    We talk on 1 banana,banana.com,banannna.com,
    take 5 grape,grape5.com,

第一个gsub删除了额外的空格,下一个gsub删除了com和逗号之间的不需要的数字。