我想知道是否有一个简单的方法来处理这个问题:从字符串的右侧找到一个模式,然后替换它的右侧。 例如:
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来制作它的东方方式。
答案 0 :(得分:4)
你可以这样做:
PATTERN='bin'
REPLACE_TO='dev/zero'
STRING='/bin/bash/bin/test/test1.txt'
echo "${STRING%$PATTERN*}$REPLACE_TO"
/bin/bash/dev/zero
${STRING%$PATTERN*}
会移除以$STRING
开头的$PATTERN
的右侧。
答案 1 :(得分:0)
使用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