カンマで区切られた特定のフィールドのすべてのスペースを削除します。

カンマで区切られた特定のフィールドのすべてのスペースを削除します。

入力する:

11 22 33 44,1 2,2

出力

11223344,1 2,2

1最初のフィールドの前にあるフィールド番号のすべてのスペースを削除したいと思いますcomma

答え1

を使用するにはsedループが必要です。

sed -e :1 -e 's/^\([^,]*\) /\1/;t1'

または、保存スペースを使用してすべてのスペースを置き換え、そこから行の元の部分を復元することもできます。

sed 'h;s/,.*//;s/ //g;G;s/\n[^,]*//'

次のコマンドを使用すると簡単になりますawk

awk -F, -v OFS=, '{gsub(" ", "", $1); print}'

またはperl:

perl -F, -lpe '$F[0] =~ s/ //g; $_ = join ",", @F'

または:

perl -pe 's{[^,]*}{$& =~ s/ //gr}e'

または:

perl -pe 's/\G[^, ]*\K //g'

最後のものは説明する価値があるでしょう:\Gフラグを伴うことですg

フラグはグローバル置換をg意味し、前の発生から次の発生を検索し続けるgループを意味します。perl

\G前の一致の後の位置、つまり最後に置き換えられた空白の後、ループの最初のパスの行の先頭と一致します。使用時に[^,]最初のコンマを通過するループは許可されないため、その前のすべてのスペースを置き換えます。

関連情報