12

複数行のテキストが入力と一致するかどうかを確認したい。grep近づいてきましたが、パターンを正規表現ではなくプレーンテキストとして解釈させる方法が見つかりませんでした。

Unix ユーティリティのみを使用して、これを行うにはどうすればよいですか?

4

3 に答える 3

10

使用grep -F

-F, --fixed-strings

PATTERNを、改行で区切られた固定文字列のリストとして解釈します。これらの文字列のいずれかが一致します。(-FPOSIXで指定されています。)

編集:最初、私は質問を十分に理解していませんでした。パターン自体に改行が含まれている場合は、次の-zオプションを使用します。

   -z, --null-data
          Treat  the  input  as  a set of lines, each terminated by a zero
          byte (the ASCII NUL character) instead of a newline.   Like  the
          -Z  or --null option, this option can be used with commands like
          sort -z to process arbitrary file names.

私はそれをテストしました、複数行のパターンは機能しました。

于 2013-01-31T17:41:08.047 に答える
1

からman grep

-F, --fixed-strings
       Interpret  PATTERN  as  a  list  of  fixed strings, separated by
       newlines, any of which is to be matched.  (-F  is  specified  by
       POSIX.)
于 2013-01-31T17:40:37.093 に答える
1

照合しようとしている入力文字列に空白行が含まれていない場合 (たとえば、改行が 2 つ連続していない場合)、次のことができます。

awk 'index( $0, "needle\nwith no consecutive newlines" ) { m=1 }
    END{ exit !m }' RS= input-file && echo matched

改行が連続している文字列を検索する必要がある場合は、RS をファイルにない文字列に設定します。(RS を複数の文字に設定した場合、awk の結果は指定されないことに注意してください。ただし、ほとんどawkの場合、文字列にすることができます。) 検索する文字列を正規表現にする場合、および awk が RS の設定をサポートしている場合複数の文字、次のことができます。

awk 'END{ exit NR == 1 }' RS='sought regex' input-file && echo matched
于 2013-01-31T18:23:30.640 に答える