如何在每行第一列之后删除,
$ cat tmp.txt
Name, Charles, James, Criss
Age, 21, 25, 23
文件中可能有n列。
我需要像
这样的输出$ cat tmp.txt
Name, Charles James Criss
Age, 21 25 23
不应从第一列删除,
。
答案 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
删除所有逗号并将其放回第一列。