2017-01-31 3 views
0

次のテキストを抽出するには、SED、AWK、またはGREPのいずれかを使用してください。私はこれに似たファイルを持っています。grep、awk、またはsedを使って2つの文字列間でテキストを抽出するにはどうすればよいですか?

Text text text text text text text 
Text text text text text text text 
    Table A 
<TABLE> 
xxx xxx xxx xxx 
xxx xxx xxx xxx 
</TABLE> 
Text text text text text text text 
Text text text text text text text 
    Table B 
<TABLE> 
xxx xxx xxx xxx 
xxx xxx xxx xxx 
</TABLE> 

テーブルAのすべての情報が必要ですが、その方法についてはわかりません。

+1

「テーブルA」の識別部分は何ですか、実際の内容は何ですか? – RomanPerekhrest

+1

すべてのテキスト、テキスト、テキストのプレースホルダを実際の代表的なサンプルテキストに置き換えます。その入力に対して期待される出力を加えます。 –

答えて

1

これらのどちらかは、あなたの期待出力とあなたのテキストの残りの部分がどのように見えるかに応じて、何をしたいことがあります

$ awk '/Table A/{f=1} f{print; if (/<\/TABLE>/) exit}' file 
    Table A 
<TABLE> 
xxx xxx xxx xxx 
xxx xxx xxx xxx 
</TABLE> 

$ awk 'f{print; if (/<\/TABLE>/) exit} /Table A/{f=1}' file 
<TABLE> 
xxx xxx xxx xxx 
xxx xxx xxx xxx 
</TABLE> 
0

</TABLE >がTABLE要素内に存在しない限り。

sed -n '/Table A/,/<\/TABLE>/p' | grep -v "Table A" 

PS:はgrepの-vは、私はちょうど私の頭の上から開始するパターンが含まれていませオプションを知らない、おそらく必要はありません。あなたは、これは動作しませんテキスト部分が必要な場合は

<TABLE> 
    xxx xxx xxx xxx 
    xxx xxx xxx xxx 
</TABLE> 

を出力します

。おそらくAWKが良いでしょう。あなたは変数名で何かが必要な場合はあなたが行うことができます

myTableName="Table A" 
sed -n "/${myTableName}/,/<\/TABLE>/p" | grep -v ${myTableName} 
+0

しないでください。範囲によって、ささいな作業が非常にわずかに簡素化されますが、必要条件の変更がわずかであれば、重複した条件(上記のような)または完全な書き換えが必要です。範囲の代わりにフラグを使うだけです(つまり、sedやgrepではなくawkを使うべきです)。 –

0

あなたはそれでもgrepすることができますが、awkはより良いようです。

grep -A1000 "Table A" file.txt | grep -B1000 "Table B"

関連する問題