ファイル内の複数行に分割される可能性のあるテキストを検索したいのですが。改行を無視し、一致する行のスパンを返すgrep。
たとえば、を検索is an example file
していて、次のファイルで見つかることを期待しています。
これは、サンプルファイル。
先頭または末尾のスペースに依存しないように、すべての形式の空白を完全に無視するのが最善の場合があります(理想的には、空白のシーケンスを単一のスペースとして扱います)。
理想的ではない解決策の1つはtr '\n' ' ' | grep
、一致と不一致を区別しますが、一致を表示せず、大きなファイルを適切に処理しないというものです。
GNUgrep
はそれを行うことができます
grep -z 'is\san\sexample\sfile.' file
コメントで発生するいくつかのポイントを満たすために、スクリプトにいくつかの変更があります。
grep -oz '^[^\n]*\bis\s*an\s*example\s*file\.[^\n]*' file
巨大なファイルに関しては、メモリ制限の想像はありませんが、問題が発生した場合は自由に使用できます sed
sed '/\bis\b/{
:1
N
/file\.\|\(\n.*\)\{3\}/!b1
}
/\<is\s*an\s*example\s*file\./p
D' file
(パターン内の4ワードのため)4行以下をメモリに保持します(\(\n.*\)\{3\}
)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加