给定包含以下格式记录的文本文件:
.....
feGroup1Person1 Person ::= {
id 1011,
uniquename "name1",
data 40,
moredata 100
}
feGroup1Person2 Person ::= {
id 5223,
uniquename "name2",
data 40,
moredata 200
}
.......
在shell脚本中,我怎样才能提取特定单序列的组和人员ID?
例如:给定“name2”,我想提取“feGroup1Person2”。
我假设需要一些正则表达式,但我没有运气。
任何帮助表示赞赏
答案 0 :(得分:1)
您不希望为此使用shell脚本。您需要使用Perl,VBScript,PowerShell或许多其他更复杂的脚本语言之一。
您使用的主要取决于您的平台。在Windows上尝试将VBScript作为首选。在Linux上,首先尝试Perl。
答案 1 :(得分:1)
> awk '$0~/Person ::= \{/{x=$1; print x}' file
feGroup1Person1
feGroup1Person2
>
如果您只想要组ID,可以在下面使用: 例如,您希望该组是名称为“name2”的人,然后:
awk '/name2/{print x2}{x2=x1;x1=x;x=$1}' file
feGroup1Person2
如果name是“name1”
awk '/name1/{print x2}{x2=x1;x1=x;x=$1}' file
feGroup1Person1
答案 2 :(得分:0)
不要试图完全按照正则表达式来制定解决方案。你的问题非常复杂,单凭正则表达式并不是明智的工具选择。
通过一些操作,您可以使它看起来像JSON format中的数据,然后使用JSON解析器解析它。任何体面的编程语言(Python,Perl,Ruby ......)都应该附带一个JSON解析器。
{
"feGroup1Person1" : {
"id" = 1011,
"uniquename" = "name1",
"data" = 40,
"moredata" = 100
}
"feGroup1Person2" :
{
"id" : 5223,
"uniquename" : "name2",
"data" : 40,
"moredata" : 200
}
}