grepで複数の行をグループ区切り文字として使用するには?

grepで複数の行をグループ区切り文字として使用するには?

グループゲームの間に何かを書くことができますgrep--group-separator

-C Xこれは、特にオプションを使用してコンテキスト行をインポートするときにどのブロックが存在するかを明確にするのに役立ちます。

$ cat a
hello
this is me
and this is
something else
hello hello
bye
i am done
$ grep -C1 --group-separator="+++++++++" 'hello' a
hello
this is me
+++++++++
something else
hello hello
bye

私は学んだgrep のコンテキスト「グループ区切り記号」として空行を使用します。と言って空行を1つだけ持つ方法--group-separator=""

しかし、2つの空白行が必要な場合はどうすればよいですか?私は言おうとしましたが、--group-separator="\n\n"文字通りの意味を得ました\n

$ grep -C1 --group-separator="\n\n" 'hello' a
hello
this is me
\n\n
something else
hello hello
bye

他の同様のものも--group-separator="\nhello\n"動作しません。

ベストアンサー1

$''ああ見つけました。代わりに構文を使用する必要がありました$""

$ grep -C1 --group-separator=$'\n\n' 'hello' a
hello
this is me



something else
hello hello
bye

からman bash

引用する

$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンスがある場合は、次のようにデコードされます。

(...)
\n     new line

おすすめ記事