次のように入力すると
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番目のフィールドと配列の終わりまで(配列内の最も高いインデックス)まで、他のすべてのフィールドを連結して新しい文字列を作成し、文字列を印刷します。perl
awk
-F
@F
join ",",@F[0,2,4..$#F]'
$#F
print
答え4
awk 'BEGIN{FS=",";OFS=","}{$2=$4="\b";print $0}' file