如何在bash中将空格替换为新行[重复]

Posted

技术标签:

【中文标题】如何在bash中将空格替换为新行[重复]【英文标题】:How to replaces space to new line in bash [duplicate] 【发布时间】:2017-03-03 20:35:40 【问题描述】:

我有一个文本文件,其中包含许多用空格分隔的单词(字符串)。如何用换行符替换空格。换句话说,我怎样才能在bash 中将每个字符串放在不同的行上?如果有人也可以建议一种使用sed 的方法,我将不胜感激!

【问题讨论】:

【参考方案1】:

一个文件bla:

a b    c d e

使用 sed:

sed 's/\s\+/\n/g' bla

结果:

a
b
c
d
e

【讨论】:

杰克打败了我,所以接受他的回答。请注意我编写它的方式将其输出到终端,而他的方法会更改文件本身(使用 bak) 谢谢 Kabanus,你的也非常好,乐于助人。【参考方案2】:

使用命令:

sed -i.bak -e 's/\s\+/\n/g' file

\s 将匹配任何空白字符(空格、制表符、换行符),\+ 将匹配连续出现的一个或多个。 -i.bak 会将您的原始文件备份到file.bak

【讨论】:

谢谢 Jack,这真的很有帮助,尤其是知道如何从原始文件中获取备份。 那你为什么不接受他的解决方案?左边的 V。【参考方案3】:
$ cat foo
a b  c
1   2 3

在 Gnu awk(和 mawk)中:

$ awk -v RS=" +|\n"  'print $0' foo
a
b
c
1
2
3

tr 用于单行:

$ tr -s \  '\n' <<< "a b  c"
a
b
c

【讨论】:

谢谢詹姆斯,很抱歉重复了这些问题,我用谷歌搜索了我的问题,但另一个问题是用换行符替换昏迷,谷歌无法帮助我找到上一篇文章。 我真的很感兴趣你的建议是使用 awk。我从来没想过 awk 能解决这个问题。【参考方案4】:

更多方法:

$ 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

使用grep

$ grep -o '[^ ]*' ip.txt 
foo
bar
baz
a
433
5er
cat
fog
try

【讨论】:

【参考方案5】:

如果 Perl 是一个选项:

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

【讨论】:

以上是关于如何在bash中将空格替换为新行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Python中用单个空格替换多个空格[重复]

在 Unix 中将 \x0D\x0A 替换为空格。赛德

在 Bash 中用另一个字符替换一个字符

如何使用 bash 脚本替换文件名中的空格

用长字符串中的新行替换空格以“换行”

如何在 bash 中的任意数量的空格之后搜索和替换字符串?