[英]sed : printing lines between two words only when one of the line matches a third word or any pattern
[英]sed only works on one line
由於某種原因,它僅在我的腳本中執行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
第一次發布,請保持友好:)我將根據需要進行編輯。
您需要通過在\\s
之后添加*
來使ip_forward
前面的空白為可選。
在示例輸入中, 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
前面匹配.*
,它可以是任意數量的任何字符(不包括換行符),我不確定這是否是意圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.