sed只适用于一行

时间:2015-07-25 21:24:47

标签: linux bash sed

出于某种原因,它只在我的脚本中执行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

第一次发帖,请不要好:)我会根据需要进行编辑。

1 个答案:

答案 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>