用于从文件中提取特定数据的Shell脚本

时间:2012-05-14 10:02:27

标签: regex shell

给定包含以下格式记录的文本文件:

.....

feGroup1Person1 Person ::= {

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

}



feGroup1Person2 Person ::= {

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

}


.......

在shell脚本中,我怎样才能提取特定单序列的组和人员ID?

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

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

任何帮助表示赞赏

3 个答案:

答案 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        
    }    
}