使用awk搜索以...开头但也包含字符串的行

时间:2017-01-13 20:05:26

标签: bash awk

我有一个文件,其中有多行以关键字开头。我只想修改其中一个,很容易区分这两个。我想要[dbinfo]部分下面的那个。域名是静态的,所以我知道这不会改变。

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

3 个答案:

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