我正处于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,
感谢任何帮助。
答案 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,
的摘录
克 将替换应用于正则表达式的所有匹配,而不仅仅是第一个。
数 只替换正则表达式的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和逗号之间的不需要的数字。