我需要在配置文件中编辑这些字符串
<port>8189</port>
<service>127.0.0..1:8190</service>
<wan-access>localhost</wan-access>
我试过了
. variables.sh
cat config.sh |
sed -i.bk \
-e 's/\<^port\>\/'$port'/\<\/\port\>/' \
-e 's/\<^service\>\/'$url'/\<\/\service\>/' \
-e 's/\<^wan-access\>\/'$url2'/\<\/\wan-access\>/' config.sh
在脚本中,变量由variables.sh文件提供。 出来应该是
<port>8787</port>
<service>my.domain.com:8190</service>
<wan-access>my.realdomain.com</wan-access>
答案 0 :(得分:1)
这就是诀窍:
port=8787
url="my.domain.com"
url2="my.realdomain.com"
sed -i.bk -Ee "s/(<port>)[0-9]+(<\/port)/\1${port}\2/" \
-e "s/(<service>)[^:]*(:.*)/\1${url}\2/" \
-e "s/localhost/${url2}/" config.sh
输出:
<port>8787</port>
<service>my.domain.com:8190</service>
<wan-access>my.realdomain.com</wan-access>
Regep说明:
s/ # The first substitution
(<port>) # Match the opening port tag (captured)
[0-9]+ # Match the port number (string of digits, at least one)
(<\/port) # Match the closing port tag (captured, escaped forwardslash)
/ # Replace with
\1 # The first capture group
${port} # The new port number
\2 # The second capture group
s/ # The second substitution
(<service>) # Match the opening service tag (captured)
[^:]* # Match anything not a :
(:.*) # Match everything from : (captured)
/ # Replace with
\1 # The first capture group
${url} # The new url
\2 # The second capture group
s/ # The third substitution
localhost # Match the literal string
/ # Replace with
${url2} # The other new url
标签匹配可能不需要如此冗长,但对初学者来说肯定更容易理解。
修改强>
如果您想更改<service>
端口,请尝试以下操作:
-e "s/(<service>).*(<\/service)/\1${url}:${port}\2/"