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
sed
コマンドは「ゼロ以上のスペース」に一致するため、間違っています。もちろん、各ペアの文字間で発生します!の代わりに s/ */ /g
欲しいs/ */ /g
またはs/ +/ /g
。
tr
を使用すると、-s
オプションは、連続する文字を1つに絞り込みます。
tr -s '[:space:]' < test.txt
iiHi Hello Hi
this is loga
小文字にも:tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'
これを解決するには、awk
を使用できます。
awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga
sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]
または
sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]
たぶん、次の正規表現を複数のスペースに一致させることができます:
'\s+'
次のように1つのスペースだけに置き換えます。
' '