2017-01-13 3 views
1

キーワードで始まる複数の行を持つファイルがあります。私はそれらのうちの1つを修正したいだけで、2つを区別するのは簡単です。 [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

あなたは[dbinfo]の存在を最初にチェックするために、このawkコマンドを使用することができますセクション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 
関連する問題