从第二次出现中删除一个字符

时间:2014-11-27 11:09:43

标签: shell unix awk sed gsub

如何在每行第一列之后删除,

$ cat tmp.txt
Name, Charles, James, Criss 
Age, 21, 25, 23

文件中可能有n列。

我需要像

这样的输出
$ cat tmp.txt
Name, Charles James Criss
Age, 21 25 23

不应从第一列删除,

5 个答案:

答案 0 :(得分:6)

您可以通过 2 告诉sed全局 g 并匹配:

$ sed 's/,//g2' file
Name, Charles James Criss 
Age, 21 25 23

答案 1 :(得分:2)

sed ':still
s/;//2
t still' tmp.txt

对于非GNU sed,其中/g2仅改变出现n°2

答案 2 :(得分:1)

在Perl中,我会通过PCRE动词(*SKIP)(*F)来完成以下操作。

$ perl -pe 's/^\S+(*SKIP)(*F)|,//g' file
Name, Charles James Criss 
Age, 21 25 23

^\S+匹配一行中出现的一个或多个非空格字符。 (*SKIP)(*F)导致匹配失败。所以现在它匹配除第一列之外的所有逗号。

$ perl -pe 's/^[^,]*,(*SKIP)(*F)|,//g' file
Name, Charles James Criss 
Age, 21 25 23

^[^,]*,匹配第一个,,然后(*SKIP)(*F)使匹配失败,|与剩余的子串,匹配所有逗号。

答案 3 :(得分:0)

使用awk:

'BEGIN{FS=","}{for(i=1;i<NF+1;i++){if(i==1){printf $i", "}else{printf $i" "}};printf "\n"}'

不是最优雅的方式,但效果很好。这里的关键是将字段分隔符设置为您想要删除的字符&#34;,&#34;然后使用printf(awk的格式化打印功能)添加&#34;,&#34;回到你感兴趣的领域之间(在这种情况下如果(i == 1),只在字段1之后添加逗号。

答案 4 :(得分:0)

awk '{gsub(/,/,"")}{$1=$1","}1' file
Name, Charles James Chriss
Age, 21 25 23

删除所有逗号并将其放回第一列。