テキストのすべてのスペースをコンマで置き換える必要があります。現在この行を使用していますが、機能しません。オリジナルと同じテキストファイルが出力されます。
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つです:
、、、、、または
[:blank:]
文字のいずれかに一致する角括弧式。 POSIX文字クラスの文字の1つと一致させたい場合に使用します。:
a
b
k
l
n
[:blank:]
[[:blank:]]
+
拡張正規表現修飾子です。この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]$