给定这样的输入
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
告诉读取输入文件并将给定-n
的perl
脚本应用-e
到每一行。原因就像将-a
其输入拆分为给定的字符并将结果保存在数组中。然后,通过连接第 1 个和第 3 个字段(数组从 0 开始),然后是第 5 个字段和其他所有字段,直到数组末尾(是数组中的最高索引)来创建一个新字符串,并打印该字符串。perl
awk
-F
@F
join ",",@F[0,2,4..$#F]'
$#F
print
答案4
awk 'BEGIN{FS=",";OFS=","}{$2=$4="\b";print $0}' file