複数行に分割できるテキストをファイルから検索したいです。 grep は改行を無視し、一致する行範囲を返します。
たとえば、is an example file
次のファイルで検索して検索することを想定します。
サンプルファイルです
。
先行または末尾のスペースに依存せずに、すべての形式のスペースを完全に無視するのが最善です(理想的には、一連のスペースを単一のスペースとして扱うことをお勧めします)。
tr '\n' ' ' | grep
一致と不一致を区別しますが、一致を表示せずに大容量ファイルをうまく処理できない非理想的なソリューションです。
答え1
GNUはgrep
それを行うことができます
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\}
)。
答え2
この試み:
pcregrep -M '\bThis\s+is\b' <<EOT
This
is
an example
file.
EOT