Station Name
ファイルとData End
ファイルの内容の間で抽出したいと思います。
説明のためのテキストファイル構造:
---- Huge text -- not interested
Station Name
100 - 200 lines
Data End
---- Again text ---
どのようにデータを簡単に抽出できますか?
通常、データの特定の部分を見つけてそれを処理(削除/交換など)するにはどうすればよいですか?つまり、特定の単語の前ですか?それとも、特定の単語の後ろに?またはそれらの間?
希望の出力
ケース1:最初から与えられた単語/パターンまで
ケース2:与えられた2つの単語/パターンの間
ケース3:与えられた単語/パターンからファイルの終わりまで。
ベストアンサー1
sed '/Station Name/,$!d; /Data End/q'
つまり、「駅名」を含む最初の行と最後の行($)を除くすべての行を削除します。その後、コマンドがエスケープされた行のd
「Data End」と一致する場合は終了します(ただし、終了する前に印刷してください)。
したがって、「Station Name」の最初の発生と「Data End」の最初の発生の間の行を印刷します(「Data End」と同じ行にあるかどうかを含む)。
ボーダーを無視するには、より複雑になります。
sed -ne '1,/Station Name/d; /Data End/!{p;n;}' -e q
「Station Name」が最初の行にある場合、または「End of Data」と同じ行にない場合は有効です。一部の実装では行範囲内の行をsed
参照できますが、これは移植可能ではありません。0
しかし、解決策があります。 sed FAQをご覧ください。
「駅名」と「駅名」の間に最初に表示されるテキストを見つけるには、状況がより複雑になります。最後「データの終わり」が発生する理由は、この場合、ファイルの終わりに達する前に最後の「データの終わり」に達したかどうかわからないからです。 sedは、ファイルの終わりまで、または次に「データの終わり」が発生するまで、「データの終わり」を確認した後に表示される行を維持する必要があります。 、移植性がないため、sed
Perlやawkなどの他のツールを使用するか、ファイルに複数回パスする必要があります。