テキストファイルのすべてのスペースをコンマで置き換えます。

テキストファイルのすべてのスペースをコンマで置き換えます。

テキストのすべてのスペースをコンマで置き換える必要があります。現在この行を使用していますが、機能しません。オリジナルと同じテキストファイルが出力されます。

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

ありがとう

答え1

GNUの使用sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

または以下を使用してperl

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

編集する:'s/[^\S\n]+/,/g'Perlから改行を除外するには、二重否定を使用するか、必要な空白文字を一致させるだけです's/[ \t\r\f]+/,/g'

答え2

使用tr:

tr -s '[:blank:]' ',' <file

これにより、水平スペースがコンマで置き換えられます。繰り返されるスペースは 1 つのコンマでのみ置き換えられます。

答え3

コマンドに問題があります。

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

2つです:

  1. 、、、、、または[:blank:]文字のいずれかに一致する角括弧式。 POSIX文字クラスの文字の1つと一致させたい場合に使用します。:abkln[:blank:][[:blank:]]

  2. +拡張正規表現修飾子です。このsedユーティリティは基本的な正規表現で、+リテラル文字と一致します+。基本正規表現で同じ効果を得るには、を使用するか、この特定の式ではを\{1,\}使用します[[:blank:]][[:blank:]]*

簡単に言えば、正しいsed表現は次のとおりです。

sed 's/[[:blank:]]\{1,\}/,/g' orig.txt >modified.txt

または

sed 's/[[:blank:]][[:blank:]]*/,/g' orig.txt >modified.txt

他の人が指摘したように、シングルバイトASCII文字がテキストに使用されていると仮定すると、あるtr文字セットを別の文字セットに単に音訳するだけなので、この場合に使用する方が効率的です。次の2つのコマンドのいずれかでtr問題を解決できます。

tr -s '[:blank:]' '[,*]' <orig.txt >modified.txt

これは[,*]、「このグループに必要なコンマ数が最初のグループの文字数と一致する」ことを意味します。

tr -s '\t ' ',,' <orig.txt >modified.txt

この-sオプションを使用するtrと、複数の連続したコンマが単一のコンマに「圧縮」されます。

答え4

awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

ここで、ファイル名は Servers です。以下の内容が含まれています。

Server1
Server2
Server3

上記のコマンドを使用すると、次のような結果が得られます。

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 

関連情報