0

给定一个包含以下形式的记录的文本文件:

.....

feGroup1Person1 Person ::= {

    id 1011,
    uniquename "name1",
    data 40,
    moredata 100

}



feGroup1Person2 Person ::= {

    id 5223,
    uniquename "name2",
    data 40,
    moredata 200

}


.......

在 shell 脚本中,我如何才能为特定的唯一名称提取组 ID 和个人 ID?

例如:给定“name2”,我想提取“feGroup1Person2”。

我假设需要一些正则表达式,但我没有任何运气。

任何帮助表示赞赏

4

3 回答 3

1

您不想为此使用 shell 脚本。您需要使用 Perl、VBScript、PowerShell 或许多其他更复杂的脚本语言之一。

您使用的主要取决于您的平台。在 Windows 上,尝试将 VBScript 作为首选。在 Linux 上,首先尝试 Perl。

于 2012-05-14T10:13:17.680 回答
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

如果名称是“name1”

awk '/name1/{print x2}{x2=x1;x1=x;x=$1}' file
feGroup1Person1
于 2012-05-14T10:26:44.710 回答
0

不要试图完全根据正则表达式来制定解决方案。您的问题非常复杂,仅使用正则表达式并不是一个明智的工具选择。

通过一些操作,您可以使其看起来像JSON 格式的数据,然后使用 JSON 解析器对其进行解析。任何体面的编程语言(Python、Perl、Ruby...)都应该带有 JSON 解析器。

{    
    "feGroup1Person1" : {        
        "id" = 1011,
        "uniquename" = "name1",
        "data" =  40,
        "moredata" = 100
    }    
    "feGroup1Person2" :
    {        
        "id" : 5223,
        "uniquename" : "name2",
        "data" : 40,
        "moredata" : 200        
    }    
}
于 2012-05-14T10:20:18.860 回答