我有一个复杂的文件,其内容为:
AAA
{
"(BBB|KKK)"
{
B_1 abc;
B_2 bcd;
B_3 efg;
B_4 xyz;
}
CCC
{
C_1 cbc;
C_2 dcd;
}
}
DDD
{
EEE
{
E_1 ebc;
E_2 fcd;
}
"(FFF|LLL|MMM|NNN)"
{
F_1 gbc;
F_2 hcd;
}
}
GGG
{
G_1 ibc;
}
HHH
{
III
{
JJJ
{
J_1 jbc;
J_2 kbc;
}
}
}
我想使用awk或一些工具来获取输出(只是举个例子)
F_1 = gbc
G_1 = ibc
J_1 = jbc
我的问题是:如何定义正则表达式模式以便匹配,首先,搜索关键字FFF
,然后输出最接近的手镯{
和{{1}之间的内容}}?
}
然后可以使用F_1 gbc;
F_2 hcd;
进一步管理此内容,我可以获得项grep
的值gbc
。
任何人都知道怎么做?
答案 0 :(得分:1)
这是一个仅适用于二级嵌套组数据的脚本:
$ awk -v var="FFF" '$1=="}"{p=0}p{sub(/^ */,"");print};$1==var{p=1;getline}' file
F_1 gbc;
F_2 hcd;
答案 1 :(得分:1)
这将允许您“定义正则表达式模式以便匹配,首先,说搜索关键字FFF,然后输出最接近的手镯{和}之间的内容”:
$ gawk -v RS='\0' '{ print gensub(/.*\yFFF\y[^{]+{[[:space:]]*\n([^}]+)\n[[:space:]]*}.*/,"\\1","") }' file
F_1 gbc;
F_2 hcd;
不要将输出传递给grep。无论您想要什么,都可以在单个awk调用中轻松完成。