如何在shell脚本中每个字符后插入一个新行?

4
假设我有以下字符串:
abcdefghi

我应该使用哪个命令才能得到以下结果:

a
b
c
d
e
f
g
h
i

我刚开始学编程,希望有人能帮助我。


3个回答

8

有一个工具叫做fold,它可以插入换行符,并且你可以告诉它在每个字符后面添加一个:

$ fold -w 1 <<< 'abcdefghi'
a
b
c
d
e
f
g
h
i

<<< 用于表示 here 字符串。如果你的 shell 不支持,则可以改用管道传递到 fold

echo 'abcdefghi' | fold -w 1

1
grep -o . <<< "abcdefghi"

1
你可以使用sed,尽管它会在最后一个字母后添加一个额外的换行符,这样你就会在末尾得到一个空行:
$ sed 's/./&\
/g' <<<abcdefghi
a
b
c
d
e
f
g
h
i

$

s/old/new/ 是 sed 命令中的“替换”操作。 在 old 部分,模式.匹配任何字符。 在 new 部分,符号&表示“与old模式匹配的内容” - 我们在替换中包含所匹配的内容,因此我们正在添加事物,而不是删除它们。

我们想要在每个匹配的字符后面加上一个换行符,但换行符将终止sed命令,并导致语法错误,除非我们在其前面加上反斜杠。

因此,我们用相同的字符(&)跟随这些字符(.),然后是换行符(\+换行符)来替换任何字符(.)。结尾的g表示替换每个出现的位置,而不仅仅是每行的第一个。

演示使用了 here-string,在大多数现代shell中都是一部分,但不是全部;您也可以使用echo abcdefghi | sed '...' 来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接