【问题标题】:How can I insert a new line after each character in shell script?如何在 shell 脚本中的每个字符后插入新行?
【发布时间】:2017-10-03 05:23:43
【问题描述】:

假设我有以下字符串:

abcdefghi

我可以使用哪个命令,结果是:

a
b
c
d
e
f
g
h
i

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

【问题讨论】:

标签: linux shell unix newline


【解决方案1】:

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

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

&lt;&lt;&lt; 用于表示here string。如果你的 shell 不支持,你可以通过管道传递给fold

echo 'abcdefghi' | fold -w 1

【讨论】:

    【解决方案2】:

    你可以使用sed,虽然它会在最后一个字母之后添加一个额外的换行符,所以你会在最后得到一个空行:

    $ sed 's/./&\
    /g' <<<abcdefghi
    a
    b
    c
    d
    e
    f
    g
    h
    i
    
    $
    

    s/old/new/ 是 sed “替代”命令。在 old 方面,. 模式完全匹配任何字符。在 new 方面,符号 &amp; 表示“无论 old 模式匹配什么” - 我们将匹配的内容包含在替换中,因此我们是在添加内容,而不是删除它们.

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

    所以我们用相同的字符 (&amp;) 替换任何字符 (.),后跟换行符 (\ + 换行符)。末尾的g 表示替换每一个匹配项,而不仅仅是每行的第一个匹配项。

    演示使用here-string,它是大多数现代shell的一部分,但不是全部;你也可以使用echo abcdefghi | sed '...'

    【讨论】:

      【解决方案3】:
      grep -o . <<< "abcdefghi"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-30
        • 2022-11-18
        • 1970-01-01
        • 2016-08-04
        • 2017-08-24
        • 1970-01-01
        • 2023-03-07
        • 2011-03-16
        相关资源
        最近更新 更多