Grepの新しい行のパターンを与える方法は?先頭に新しい行、末尾に新しい行。正規表現ではありません。\nのようなもの。
grep
パターンは個々の行と照合されるため、入力で見つかった改行とパターンを照合する方法はありません。
ただし、次のような空の行を見つけることができます。
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
通常のpcregrep
の代わりにgrep
を試してください:
pcregrep -M "pattern1.*\n.*pattern2" filename
-M
オプションを使用すると、複数行にわたって一致させることができるため、\n
として改行を検索できます。
この方法を使用できます...
grep -P '^\s$' file
-P
はPerlの正規表現に使用されます(POSIX grep
の拡張)。\s
は空白文字と一致します。 *
が続く場合、空行にも一致します。^
は、行の先頭に一致します。 $
は行末に一致します。@jarnoのおかげで、私は-zオプションについて知っていて、GNU grepを-Pオプションと一緒に使用すると、\n
に対してマッチングが可能であることがわかりました。 :)
例:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
bar
を印刷します
回避策として(非ポータブル-P
を使用せずに)、一時的に改行文字を別の文字に置き換えて、元に戻すことができます。例:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
基本的には、完全一致_foo_
を探します。ここで、_
は\n
を意味します(したがって__
= \n\n
)。とにかく各パターンが新しい行に印刷されるので、tr '_' '\n'
で元に戻す必要はありません。したがって、_
を削除するだけで十分です。