用正则表达式替换sed

时间:2014-08-11 15:24:29

标签: regex bash sed

需要使用正则表达式替换文件中的字符串。 我的正则表达式为api.(dev[0-9]+\.)?side.com,我正在使用它:

sed "s/api.(dev[0-9]+\.)?side.com/$SERVER_HOST_VALUE/g"

但它没有找到任何字符串,例如" api.side.com"或" api.dev02.side.com"。正则表达式对我有用,而不仅仅用于" sed"命令。

那么如何正确使用当前正则表达式sed

1 个答案:

答案 0 :(得分:3)

根据@ fedorqui&@ hwnd的建议,使用-r option

sed -re "s/api.(dev[0-9]+\.)?side.com/$SERVER_HOST_VALUE/g"

注意:如果您使用单引号而不是双引号,则变量$SERVER_HOST_VALUE不会被展开。

测试

SERVER_HOST_VALUE="AWESOME"
tests=( "api.side.com" "api.dev05.side.com" )
for t in "${tests[@]}"; do 
    echo "$t" | sed -re "s/api.(dev[0-9]+\.)?side.com/$SERVER_HOST_VALUE/g"
done

输出

请注意匹配如何被$SERVER_HOST_VALUE替换:

AWESOME
AWESOME