【问题标题】:multiple strings replacements on variable [duplicate]变量上的多个字符串替换[重复]
【发布时间】:2018-04-03 19:42:13
【问题描述】:

bash 是否支持一次对一个变量进行多个字符串替换?

在一个变量(例如 V 变量)上,我想用 string1 替换 XXXXXXX,用 string2 替换 YYYYY,用 string3 替换 ZZZZZZZ

是否可以运行 1 个这样的 relpacement 命令而不是下面的 3 个运行?

$ V="AAAAAAA/XXXXXXX/BBBBBB/YYYYY/CCCCCC/ZZZZZZZ"
$ V=${V//XXXXXXX/string1}
$ V=${V//YYYYY/string2}
$ V=${V//ZZZZZZZ/string3}
$ echo $V
AAAAAAA/string1/BBBBBB/string2/CCCCCC/string3
$

更新:有人将我的问题标记为另一个问题的副本,不幸的是,我在页面上没有发现我的问题与其他问题有任何直接相似之处或答案。

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    是的,你可以这样做:-

    V=$(echo "$V" | sed 's/XXXXXXX/string1/g;s/YYYYY/string2/g;s/ZZZZZZZ/string3/g')
    

    它将如何运作? sed 命令将搜索 sting XXXXXX 并将其替换为 string2,将字符串 YYYYYY 替换为 string2,最后将 ZZZZZZZ 替换为 string3 并将新字符串存储到变量 V 中。

    所以现在检查如下结果:-

    echo $V
    

    【讨论】:

      【解决方案2】:

      如果你使用sed会更容易。

      V=$(echo $V | sed -e 's/XXXXXXX/string1/' -e 's/YYYYY/string2/' -e 's/ZZZZZZZ/string3/')
      

      【讨论】:

      • 缺少斜线(在string2和string3之后)
      • 我收到了sed: -e expression #2, char 15: unterminated 's' command
      • 立即尝试。忘记了终止斜线
      • 现在好了.....
      【解决方案3】:

      @Abhijit 的回答非常好(sed 选项 /g 对应于 Bash // 替换,用于替换所有出现)但请注意,在 Bash 中,您可以通过以下方式避免回显和管道:

      V=$(sed -e 's/XXXXXXX/string1/g;s/YYYYY/string2/g;s/ZZZZZZZ/string3/g' <<< $V)
      

      这个功能实际上叫做here string

      【讨论】:

        猜你喜欢
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多