sedを使用してファイルから2番目と4番目のカンマ区切りの単語をすべて削除する方法は?

sedを使用してファイルから2番目と4番目のカンマ区切りの単語をすべて削除する方法は?

次のように入力すると

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

sedを使用して各行の2番目と4番目の単語を削除したいと思います。言葉は厳密に英数字です。

答え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

各行の2番目と4番目のフィールドのみを削除するには、次のようにします。

$ 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次に、最初と3番目のフィールド(配列は0から始まり)を連結し、5番目のフィールドと配列の終わりまで(配列内の最も高いインデックス)まで、他のすべてのフィールドを連結して新しい文字列を作成し、文字列を印刷します。perlawk-F@Fjoin ",",@F[0,2,4..$#F]'$#Fprint

答え4

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

関連情報