3

コンテンツを含むファイルがあります:

[属性]
name="name1"
default="abcd"
[表]
name="tabCol"
default="abcd"
type="abc"
[表]
name="tabCol1"
default="abcd1"
type="abc1"
[表]
name="tabCol2"
default="abcd2"
type="abc2"

特定の見出しコンテンツを取得したい。見出し [ATTRIBUTES] の最初の出現のコンテンツが必要な場合のように、出力は次のようになります。

[属性]
name="name1"
default="abcd"

同様に、見出しテーブルの 2 番目の出現の内容が必要な場合、出力は次のようになります。

[表]
name="tabCol1"
default="abcd1"
type="abc1"

これは、UNIX シェル スクリプトを使用して行う必要があります。sedを使用するのが最善だと思いますが、方法がわかりません。
だから助けてください。
前もって感謝します

4

6 に答える 6

1

これはうまくいくかもしれません(GNU sed):

sed -r '/^\[ATTRIBUTES]/!d;x;s/^/X/;/^X{1}$/{x;:a;$q;n;/^\[/Q;ba};x;d' file

最初のATTRIBUTESブロック、または:

sed -r '/^\[TABLE]/!d;x;s/^/X/;/^X{1}$/{x;:a;$q;n;/^\[/Q;ba};x;d' file

最初のTABLEブロック、または:

sed -r '/^\[TABLE]/!d;x;s/^/X/;/^X{2}$/{x;:a;$q;n;/^\[/Q;ba};x;d' file

2 番目のTABLEブロックまたは:

sed -r '/^\[TABLE]/!d;x;s/^/X/;/^X{3}$/{x;:a;$q;n;/^\[/Q;ba};x;d' file

3 番目のTABLEブロックの場合。

于 2013-11-02T18:17:08.723 に答える
1

awk を使用して実行できる別の方法を次に示します。

parse.awk

BEGIN { FS = "[][]" }
/^\[/ && f  == n       { exit }
/^\[/ && $2 == heading { f++  }
f == n

次のように実行します。

awk -f parse.awk heading=TABLE n=2 infile

出力:

[TABLE]
name="tabCol1"
default="abcd1"
type="abc1"
于 2013-11-01T18:52:34.583 に答える
1

と適切な ini ファイル パーサーを使用する場合:

$ perl -MConfig::IniFiles -e '
    my $cfg = new Config::IniFiles -file => "./conf";
    printf "[ATTRIBUTES]\nname=%s\ndefault=%s\n",
        $cfg->val("ATTRIBUTES", "name"),
        $cfg->val("ATTRIBUTES", "default");
' conf
[ATTRIBUTES]
name="name1"
default="abcd"
于 2013-11-01T19:50:43.313 に答える
0
MyBloc="TABLE"
MyOccurence=2

sed -n "H
$ {s/$/\
\[/;^s/\(.*\[${MyBloc}\]\){${MyOccurence}\}\(.*\n\)\[\(.*\)$/\[${MyBloc}\]\2/p" YourFile

(no session to test here now)

于 2013-11-02T20:02:15.897 に答える