出于某种原因,它只在我的脚本中执行sed的第一行。根据我的知识,第二条线并没有被运行。我忘记了什么吗?我已经编辑了几个小时但没有用。
脚本:
#!/bin/bash
#Locations
LocationOne="$SERVER_DIR/config.yml"
if [ -f "$LocationOne" ]
then
cd "$SERVER_DIR"
sed -i "s/^.*\shost:.*/ host: $IP:$PORT/g" $SERVER_DIR/config.yml
sed -i "s/^.*\sip_forward: false/ ip_forward: true/g" $SERVER_DIR/config.yml
fi
exit 0
config.yml:
listeners:
- query_port: XXXXX
host: XXX.XXX.XXX.XXX:XXXXX
timeout: 30000
connection_throttle: 4000
ip_forward: false
online_mode: true
第一次发帖,请不要好:)我会根据需要进行编辑。
答案 0 :(得分:4)
您需要在ip_forward
之前添加*
之后,在\s
之前添加空格。
在您的示例输入中,ip_forward
前面没有空白字符,因此您的表达式不匹配,因为它至少需要空格字符。
#!/bin/bash
#Locations
LocationOne="$SERVER_DIR/config.yml"
if [ -f "$LocationOne" ]
then
cd "$SERVER_DIR"
sed -i "s/^.*\s*host:.*/ host: $IP:$PORT/g" $SERVER_DIR/config.yml
sed -i "s/^.*\s*ip_forward: false/ ip_forward: true/g" $SERVER_DIR/config.yml
fi
另请注意,您在.*
前面匹配ip_forward
,这是任意数量的任意字符(不包括换行符),我不确定这是否是意图。< / p>