アクティブなプロジェクトの名前を選択したいプロジェクトのリストがあります。
item {
status: "Active"
properties {
key_a: value
}
id: 42
name: "Foo"
}
item {
status: "Disabled"
properties {
key_b: value
}
id: 12
name: "Bar"
}
item {
status: "Active"
id: 2
name: "Baz"
}
キャプチャグループを使用して名前を抽出できることを知っていますpcregrep
。
$ cat list.txt | pcregrep -o1 -i '^ name: "(.*)"'
Foo
Bar
Baz
OR式を使用すると、重複した状態値と名前のリストを取得することもできます。
$ cat list.txt | pcregrep -o2 -i '^ (status|name): "(.*)"'
Active
Foo
Disabled
Bar
Active
Baz
最後に、前の行に基づいてリストの名前をフィルタリングする必要があります。どうすればいいですか?
最終出力は次のようになります。
Foo
Baz
ベストアンサー1
バリエーションだけではこれを行うことができないと思いますgrep
(もちろんわかりませんpcregrep
)。努力するawk
:
awk '/^ *status.*Active.$/ {ACT = 1} /^ *name:/ && ACT {gsub (/"/, "", $2); print $2; ACT = 0}' file
Foo
Baz