改行文字を無視してファイルからテキストを検索するには?

改行文字を無視してファイルからテキストを検索するには?

複数行に分割できるテキストをファイルから検索したいです。 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\})。

おすすめ記事