需要使用正则表达式替换文件中的字符串。
我的正则表达式为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
?
答案 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