0

次の形式のレコードを含むテキスト ファイルがあるとします。

.....

feGroup1Person1 Person ::= {

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

}



feGroup1Person2 Person ::= {

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

}


.......

シェル スクリプトで、特定の一意の名前のグループ ID と個人 ID を抽出するにはどうすればよいですか?

例: "name2" を指定して、"feGroup1Person2" を抽出します。

いくつかの正規表現が必要になると思いますが、うまくいきません。

どんな助けでも大歓迎

4

3 に答える 3

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 に答える
1

これにはシェルスクリプトを使用したくありません。Perl、VBScript、PowerShell、または他の多くのより洗練されたスクリプト言語のいずれかを使用する必要があります。

どちらを使用するかは、主にプラットフォームによって異なります。Windows では、最初の選択肢として VBScript を試してください。Linux では、最初に Perl を試してください。

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