111

grepで改行のパターンを与える方法は?最初に新しい行、最後に新しい行。正規表現の方法ではありません。\nのようなもの。

4

6 に答える 6

102

pcregrep通常の代わりに試してくださいgrep

pcregrep -M "pattern1.*\n.*pattern2" filename

この-Mオプションを使用すると、複数の行にまたがって一致するため、改行をとして検索できます\n

于 2012-10-01T17:46:57.000 に答える
95

grepパターンは個々の行と照合されるため、入力で見つかった改行とパターンを照合する方法はありません。

ただし、次のような空の行を見つけることができます。

grep '^$' file
grep '^[[:space:]]*$' file # include white spaces 
于 2012-09-29T12:23:53.050 に答える
28

@jarnoのおかげで、-zオプションについて知っており、GNU grepを-Pオプションとともに使用すると、照合\nが可能であることがわかりました。:)

例:

grep -zoP 'foo\n\K.*'<<<$'foo\nbar'

プリントbar

于 2018-03-09T11:10:50.590 に答える
24

あなたはこのように使うことができます...

grep -P '^\s$' file
  • -PPerl正規表現(POSIXの拡張grep)に使用されます。
  • \s空白文字と一致します。が後に続く場合は*、空の行にも一致します。
  • ^行の先頭に一致します。$行の終わりに一致します。
于 2012-09-29T12:30:32.097 に答える
6

回避策(非ポータブルを使用しない-P)については、改行文字を一時的に別の文字に置き換えて、元に戻すことができます。例:

grep -o "_foo_" <(paste -sd_ file) | tr -d '_'

_foo_基本的に、は(so = )_を意味する完全一致を探しています。とにかく各パターンが新しい行に印刷されるので、それを元に戻す必要はありません。したがって、削除するだけで十分です。\n__\n\ntr '_' '\n'_

于 2015-10-18T12:04:28.923 に答える
4

見つかったばかり

grep $'\r'

$'\r'Bashのcスタイルのエスケープに使用しています。

この記事で

于 2018-12-29T10:21:21.850 に答える