如何在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中将空格替换为新行[重复]的主要内容,如果未能解决你的问题,请参考以下文章