web-dev-qa-db-ja.com

複数のスペースを1つのスペースに置き換えるsedコマンド

Sedを使用して、ファイル内の複数のスペースを1つのスペースに置き換えようとしました。

しかし、それは以下のように一人一人の文字を分割します。問題が何であるか教えてください...

$ cat test.txt
 iiHi Hello   Hi
this   is   loga

$

$ cat test.txt | tr [A-Z] [a-z]|sed -e "s/ */ /g"
 i i h i h e l l o h i
 t h i s i s l o g a 
13
logan

sedコマンドは「ゼロ以上のスペース」に一致するため、間違っています。もちろん、各ペアの文字間で発生します!の代わりに s/ */ /g欲しいs/ */ /gまたはs/ +/ /g

19
John Zwinck

trを使用すると、-sオプションは、連続する文字を1つに絞り込みます。

tr -s '[:space:]' < test.txt
 iiHi Hello Hi
this is loga

小文字にも:tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'

14
glenn jackman

これを解決するには、awkを使用できます。

awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga
4
Jotne
sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]

または

sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]
2
Amos Baker

たぶん、次の正規表現を複数のスペースに一致させることができます:

'\s+'

次のように1つのスペースだけに置き換えます。

' '

0
sshashank124