grepで改行のパターンを与える方法は?最初に改行、最後に改行。正規表現の方法ではありません。\ nのようなもの。
grepで改行のパターンを与える方法は?最初に改行、最後に改行。正規表現の方法ではありません。\ nのようなもの。
$
。多少制限はありますが、単純な場合に使用できます。
回答:
grep
パターンは個々の行と照合されるため、入力で見つかった改行とパターンを照合する方法はありません。
ただし、次のような空の行を見つけることができます。
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
pcregrep
通常の代わりに試してくださいgrep
:
pcregrep -M "pattern1.*\n.*pattern2" filename
この-M
オプションを使用すると、複数の行にまたがって一致するため、改行をとして検索できます\n
。
@jarnoのおかげで、私は-zオプションについて知っており、GNU grepを-Pオプションとともに使用すると\n
、照合が可能であることがわかりました。:)
例:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
プリント bar
grep -zoPnir "dex\n035" ./dir/
あなたはこのように使うことができます...
grep -P '^\s$' file
-P
Perl正規表現(POSIXの拡張grep
)に使用されます。\s
空白文字と一致します。が後に続く場合は*
、空の行にも一致します。^
行頭に一致します。$
行の終わりに一致します。 -P
GNU拡張です。状況に応じて(通常は先読み/後読み)使用しても問題ありませんが、POSIXgrepは[[:space:]]
。を使用してファイルするだけでこれを実行できます。
-P
ます。とにかくGNUはかなり標準的です。:)
brew install grep
いくつかの点で優れているGNUGrepを入手したいと思うでしょう。 apple.stackexchange.com/questions/193288/...
回避策(非ポータブルを使用しない-P
)については、改行文字を一時的に別の文字に置き換えて、元に戻すことができます。例:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
基本的に_foo_
、_
は\n
(so __
= \n\n
)を意味する完全一致を探しています。tr '_' '\n'
とにかく各パターンが新しい行に印刷されるので、それを元に戻す必要はありません_
。したがって、削除するだけで十分です。
<(p paste -sd_ file )
でしたか?
new line at the beginning
は空白行でありnew line at end
、ファイル内のすべての行に適用されます。例を投稿できますか?