【问题标题】:How to replace any character (e.g. ":") with new line in bash variable pattern substitution?如何在bash变量模式替换中用新行替换任何字符(例如“:”)?
【发布时间】:2014-04-24 04:30:42
【问题描述】:

我想使用变量模式替换在 $PATH 中用新行替换“:”

echo ${PATH/:/"<WHAT TO PUT HERE>"}

我试过了:

echo ${PATH/:/"\n"}

但这不起作用

【问题讨论】:

    标签: regex bash variables


    【解决方案1】:

    您可以像在其他任何地方一样使用带引号的字符串。

    echo "${PATH//:/
    /}"
    

    为了提高可读性,试试这个:

    echo "${PATH//:/$'\n'}"
    

    (您可能希望在任何地方都替换冒号,而不仅仅是第一次出现。因此,// 而不是/。)

    【讨论】:

    • 我能问你在哪里可以读到这个。具体来说,您是如何知道 // 替换所有出现的 :) ?
    • Bash 有一个手册页和一个on-line reference
    【解决方案2】:

    在替换中使用 POSIX 字符串 ($'...');它们支持 C 风格的反斜杠序列:

    echo "${PATH//:/$'\n'}"
    

    我使用了// 而不是/,这样它将替换所有冒号,而不仅仅是第一个。

    【讨论】:

    • 这里:gnu.org/software/bash/manual/…。相关位:${parameter/pattern/string} The pattern is expanded to produce a pattern just as in filename expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. If pattern begins with ‘/’, all matches of pattern are replaced with string.
    【解决方案3】:

    我意识到问题已被更新以排除这些解决方案,但我将它们留在这里供任何好奇的人使用。

    使用sed

    echo $PATH | sed 's/:/\n/g'
    

    使用tr

    echo $PATH | tr ':' '\n'
    

    【讨论】:

    • 我已经看到它在 ${} 中完成了。如果我知道这个构造是如何被调用的,我会看看 ${} 的人......你知道吗?
    • 我从未见过它的具体名称,但我猜你可以谷歌搜索变量替换。
    【解决方案4】:

    这就是你需要的:

    printf ${PATH//:/'\n'}
    

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 2011-11-05
      • 2015-11-25
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多