単一のgrep
コマンドを使用して、2つの異なる行にある2つの異なるフレーズを検索するにはどうすればよいですか?
例えば
1行目:これは甘いです。
2行目:レモン。
これを使用しましたが、結果はありません
grep "sweet.*lemon" file_type
2つの異なる行にgrep
を使用するには、両方のパターンを検索します
$ grep -e sweet -e lemon file_type
This is a sweet
lemon.
または交互に使用する
$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.
パターンの次の行を取得するには、コンテキストオプションを使用できます
$ grep -A1 sweet file_type
This is a sweet
lemon.
ただし、複数行のパターンを明示的に検索している場合は、 grep
は行を考慮しているため... です。 .*
は、「sweet」と「lemon」の間にあるすべての行をキャッチします。 -P
を使用して改行に一致させ、grep
に\n
で区切られたヌルであると伝えることにより、-z
で次の行に「レモン」を取得できます。
$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.
-E
拡張正規表現を使用します(エスケープせずに|
文字を交互に使用します)-An
パターンの後に追加の行を印刷します。nは、印刷する末尾の行数です-P
Perlスタイルの正規表現を使用します(grep
の「実験的」-Perl正規表現のサポートを改善するために、代わりにpcregrep
をインストールします)-z
区切り文字としてヌル文字を使用します(この場合はふりをしますが、grep
はWordを使用します)-o
一致した部分のみを印刷しますこのような:
grep "sweet\|lemon"