3

次のような単純な構成ファイルがあります。

[sectionA]
url = value1
username = value2
password = value3

[sectionC]
url = value1
username = value2
password = value3

[sectionB]
url = value1
username = value2
password = value3

valueXそして、セクションAまたはセクションCのユーザー名に触れずに、セクションBのユーザー名を置き換えたいと思います。

でいくつかのバリエーションを試しsedましたが、理解できる限り、個々の行で動作しているようです。

同等のことを行うにはどうすればよいですか

  1. StringA を検索します (この場合は[SectionB])
  2. 次に出現する StringB を検索します ( username = value2)
  3. StringC に置き換えます ('username = valueX`)
4

2 に答える 2

4

sed:

sed '/sectionB/,/\[/s/username.*/username = valueX/' input

awk:

awk -vRS='' -vFS='\n' -vOFS='\n' '
$1~/sectionB/{
    sub(/=.*$/, "= valueX", $3)
}
{
    printf "%s\n\n", $0
}' input
于 2012-08-15T23:26:44.733 に答える
0

この複数行の sed でうまくいくはずです:

sed -E -n '1h;1!H;${;g;s/\[sectionB\]([^[]*)username = [a-zA-Z0-9_]+/\[sectionB\]\1username = valueX/g;p;}' input.txt
于 2012-08-15T23:28:13.253 に答える