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

Remove whitespaces till we find comma, but this should start skipping first comma in each line of a file

我正在学习 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,

感谢任何帮助。

如果您正在使用 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

g Apply the replacement to all matches to the regexp, not just the first.

number Only replace the numberth match of the regexp.

 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 删除多余的 space,下一个删除 com 和逗号之间不需要的数字。