如何在bash中将空格替换为新行

如何在bash中将空格替换为新行,bash,sed,Bash,Sed,我有一个文本文件,其中包含许多由空格分隔的单词(字符串)。如何用换行符替换空格。换句话说,如何使每个字符串位于bash中的不同行上?如果您能建议使用sed的方法,我将不胜感激 使用命令: sed -i.bak -e 's/\s\+/\n/g' file \s将匹配任何空白字符(空格、制表符、换行符),并且\+将匹配一行中的一个或多个匹配项-i.bak会将原始文件备份到file.bak文件bla: a b c d e 使用sed: sed 's/\s\+/\n/g' bla 结果: a

我有一个文本文件,其中包含许多由空格分隔的单词(字符串)。如何用换行符替换空格。换句话说,如何使每个字符串位于
bash
中的不同行上?如果您能建议使用
sed
的方法,我将不胜感激

使用命令:

sed -i.bak -e 's/\s\+/\n/g' file
\s
将匹配任何空白字符(空格、制表符、换行符),并且
\+
将匹配一行中的一个或多个匹配项
-i.bak
会将原始文件备份到
file.bak

文件bla:

a b    c d e
使用sed:

sed 's/\s\+/\n/g' bla
结果:

a
b
c
d
e
在Gnu awk(和mawk)中:

对单行使用
tr

$ tr -s \  '\n' <<< "a b  c"
a
b
c
$tr-s\'\n'还有几种方法:

$ cat ip.txt 
foo bar   baz
a    433 5er
cat  fog try

使用
xargs

$ xargs -n1 < ip.txt 
foo
bar
baz
a
433
5er
cat
fog
try
如果Perl是一个选项:

echo "a b    c d e" | perl -pe 's/\s+/\n/g'

杰克狠狠地揍了我一顿,所以接受他的回答。请注意,我写它的方式将其输出到终端,而他的方法更改了文件本身(使用bak)。谢谢你,卡巴纳斯,你的方法也非常好,非常有用。谢谢你,杰克,这非常有用,特别是知道如何从原始文件中获取备份。你为什么不接受他的解决方案?左边的V。谢谢你,詹姆斯,很抱歉重复了这些问题,我用谷歌搜索了我的问题,但另一个问题是用新线取代昏迷,谷歌无法帮我找到上一篇文章。我真的很好奇你的建议是用awk。我从来没有想到过解决这个问题的awk。
$ xargs -n1 < ip.txt 
foo
bar
baz
a
433
5er
cat
fog
try
$ grep -o '[^ ]*' ip.txt 
foo
bar
baz
a
433
5er
cat
fog
try
echo "a b    c d e" | perl -pe 's/\s+/\n/g'