如何用bash中的另一个给定字符串递归替换字符串的一部分?

时间:2017-06-07 19:14:34

标签: bash terminal

我需要编写bash脚本,将只有整数“intString”的字符串转换为:id。 intString始终存在于/之后,可能永远不会包含任何其他类型(create_step2不是有效的intString),并且可能以第二个/或行尾结束。 intString可以是任何1-8个字符。需要为给定文件中的每一行重复脚本。

例如: /sample/123456/url应转换为/sample/:id/url 并且/sample_url/9应转换为/sampleurl/:id,但/sample_url_2/应保持不变。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

看起来问题还有很长的路要走,但是我不知道你在解决什么问题。它似乎是一个很好的sed命令,如

sed -E 's/\/[0-9]{1,}/\/:id/g'

可以一次性做到这一点,但如果你坚持递归那么它可能就是这样......

#!/bin/bash

function restring()
{
    s="$1"
    s="$(echo $s | sed -E 's/\/[0-9]{1,}/\/:id/')"

    if ( echo $s | grep -E '\/[0-9]{1,}' > /dev/null ) ; then
        restring $s
    else
        echo $s
        exit       
    fi

    echo $s
}

restring "$1"

现在运行它

$ ./restring.sh" / foo / 123 / bar / 456 / baz / 45435 / andstuff"

/富/:ID /棒/:ID /巴兹/:ID / andstuff