如何使用 sed 从文件中删除每隔第二个和第四个逗号分隔的单词?

如何使用 sed 从文件中删除每隔第二个和第四个逗号分隔的单词?

给定这样的输入

this,is,a,test,string,containing,multiple
lines,of,string,with,numb3rs,and,w0rds

我想使用 sed 删除每行中的第二个和第四个单词。单词严格由字母数字组成。

答案1

最自然的工具是cut

cut -d , -f 1,3,5-

对于 sed,用于\([^,]*,\)匹配一个字段。

sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*,\)\([^,]*,\)/\1\3/'

答案2

它不是 sed,但您可以使用 Miller (https://github.com/johnkerl/miller)并运行

<input mlr --csv -N unsparsify then cut -x -f 2,4

具有

this,a,string,containing,multiple
lines,string,numb3rs,and,w0rds

答案3

如果您只想删除每行的第二个和第四个字段,您可以执行以下操作:

$ perl -F, -lane 'print join ",", @F[0,2,4..$#F]' file
this,a,string,containing,multiple
lines,string,numb3rs,and,w0rds

告诉读取输入文件并将给定-nperl脚本应用-e到每一行。原因就像将-a其输入拆分为给定的字符并将结果保存在数组中。然后,通过连接第 1 个和第 3 个字段(数组从 0 开始),然后是第 5 个字段和其他所有字段,直到数组末尾(是数组中的最高索引)来创建一个新字符串,并打印该字符串。perlawk-F@Fjoin ",",@F[0,2,4..$#F]'$#Fprint

答案4

awk 'BEGIN{FS=",";OFS=","}{$2=$4="\b";print $0}' file

相关内容