【问题标题】:bash - easy way to replace directory string from right-hand sidebash - 从右侧替换目录字符串的简单方法
【发布时间】:2018-06-25 13:03:25
【问题描述】:

我想知道是否有一种简单的方法来处理这个问题:从字符串的右侧找到一个模式,然后替换它的右侧。 例如:

PATTERN='bin'
REPLACE_TO='dev/zero'
STRING='/bin/bash/bin/test/test1.txt'

我们发现 STRING 中 PATTERN 的最后一个索引是 2,然后将其替换为 REPLACE_TO。所以结果是:

STRING='bin/bash/dev/zero'

我知道我可以编写一个函数来做到这一点,但不确定是否有使用 sed/awk/others 的东方方式。

【问题讨论】:

    标签: regex string bash awk sed


    【解决方案1】:

    你可以这样做:

    PATTERN='bin'
    REPLACE_TO='dev/zero'
    STRING='/bin/bash/bin/test/test1.txt'
    echo "${STRING%$PATTERN*}$REPLACE_TO"
    
    /bin/bash/dev/zero
    

    ${STRING%$PATTERN*} 将删除以$PATTERN 开头的$STRING 右侧。

    【讨论】:

      【解决方案2】:

      使用 sed:

      #!/bin/bash
      PATTERN='bin'
      REPLACE_TO='dev/zero'
      STRING='/bin/bash/bin/test/test1.txt'
      
      #Escape PATTERN and REPLACE_TO
      PATTERN=$(sed -e 's/[][\/&*?+.^${}]/\\&/g' <<< "$PATTERN")
      REPLACE_TO=$(sed -e 's/[][\/&*?+.^${}]/\\&/g' <<< "$REPLACE_TO")
      
      sed -r "s/(.*)$PATTERN.*/\1$REPLACE_TO/" <<< "$STRING"
      

      如果 PATTERN 不存在,则输出为 STRING

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-05
        • 2011-01-24
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 2010-09-18
        • 2018-12-15
        • 2011-03-27
        相关资源
        最近更新 更多