1

重複の可能性:
bash、ファイルの一部を解析

Case 4
case 4.1
a 3
a 5
a 7
a 1
a 9
a 4
endcase 4.1
//
.
.
. Do things that don't get parsed
.
.
//
case 4.2 
a 1
b 3
a 6
b7 
endcase 4.2
endcase 4 
//
.
.
.
. More things
.
.
// 
case 5
.
.
.
.
endcase 5

上記のサンプルファイルを検討してください。コマンド awk '/^case 4.2/,/^endcase 4.2/' ./my_file.txt

は、必要なセクションに含まれる情報のみをファイルから抽出します。では、この小さなセクションから「a」で始まる行だけを抽出するにはどうすればよいでしょうか。私のファイルはサンプルよりやや複雑ですが、ロジックは適用されると思います。

4

2 に答える 2

2

あなたはsedでそれを行うことができます:

sed -n -e '/^case 4[.]2/,/^endcase 4[.]2/ { /^a/p }' my_file.txt

は、-n指定した行のみを印刷するように sed に指示します。中括弧はコマンドのグループであり、使用されるアドレス接頭辞 (awk で使用したものと同じ) によって、それらが case ブロックでのみ実行されることが保証されます。このグループには、「p」印刷コマンドである単一のコマンドのみが含まれます。ただし、このコマンドの前に別のアドレス プレフィックスを付けます。これは、行が「a」で始まる場合にのみ実行するように指示します。

アドレスを入れ子にすることで、「case 4.2」行と「endcase 4.2」行の間にあり、「a」テキストで始まるコマンドを実行できます。

これが役立つことを願っています=)

于 2012-10-04T16:27:01.740 に答える
1

awkで、これはうまくいくかもしれないと思ったが、うまくいかない

awk '/^case 4.2/,/^endcase 4.2/ && /^a/' filename

代わりに、これは機能します:

awk '/^case 4.2/,/^endcase 4.2/ {if (/^a/) print}' filename
于 2012-10-04T16:33:34.167 に答える