2017-01-13 186 views
1

我有一个文件,其中有多行以关键字开头。我只想修改其中一个,并且很容易区分这两者。我想要一个在[dbinfo]部分下的那个。域名是静态的,所以我知道这不会改变。使用awk搜索以字符串开头但包含字符串的行

awk -F '=' '$1 ~ /^dbhost/ {print $NF};' myfile.txt 

myfile.txt的

[ual] 
path=/web/ 
dbhost=ez098sf 

[dbinfo] 
dbhost=ec0001.us-east-1.localdomain 
dbname=ez098sf_default 
dbpass=XXXXXX 
+1

那么,什么是所需的输出? – NinjaGaiden

+0

我最终想要修改该参数的值。所以,我不想触摸'[ual]'下的'dbhost'值,我想要''dbinfo]'下的那个值。 – luckytaxi

+0

你的标题似乎不符合问题。该行不包含字符串,它位于以某个其他字符串开头的块中。 – Barmar

回答

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

你想在这里使用一个状态机的一点点:

awk -F '=' ' 
    $0 ~ /^\[.*\]/ {in_db_info=($0=="[dbinfo]"} 
    $0 ~ /^dbhost/{if (in_db_info) print $2;}' myfile.txt 
1

您还可以使用SED做到这一点:

sed '/\[dbinfo\]/,/\[/s/\(^dbhost=\).*/\1domain.com/' myfile.txt 
相关问题