我有一个文件,其中有多行以关键字开头。我只想修改其中一个,很容易区分这两个。我想要[dbinfo]
部分下面的那个。域名是静态的,所以我知道这不会改变。
awk -F '=' '$1 ~ /^dbhost/ {print $NF};' myfile.txt
[ual]
path=/web/
dbhost=ez098sf
[dbinfo]
dbhost=ec0001.us-east-1.localdomain
dbname=ez098sf_default
dbpass=XXXXXX
答案 0 :(得分:2)
您可以使用此awk命令首先检查是否存在[dbinfo]
部分,然后修改dbhost
参数:
awk -v h='newhost' 'BEGIN{FS=OFS="="}
$0 == "[dbinfo]" {sec=1} sec && $1 == "dbhost"{$2 = h; sec=0} 1' file
[ual]
path=/web/
dbhost=ez098sf
[dbinfo]
dbhost=newhost
dbname=ez098sf_default
dbpass=XXXXXX
答案 1 :(得分:1)
你想在这里使用一点状态机:
awk -F '=' '
$0 ~ /^\[.*\]/ {in_db_info=($0=="[dbinfo]"}
$0 ~ /^dbhost/{if (in_db_info) print $2;}' myfile.txt
答案 2 :(得分:1)
你也可以用sed:
来做sed '/\[dbinfo\]/,/\[/s/\(^dbhost=\).*/\1domain.com/' myfile.txt