
グループゲームの間に何かを書くことができます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
答え2
使用することをお勧めしますecho -e
またはprintf
そして\\n
改行。
はい(含むecho -e
):
$ grep -C1 --group-separator="$(echo -e line1\\n\\nline2)" 'hello' a
hello
this is me
line1
line2
something else
hello hello
bye
はい(含むprintf
):
$ grep -C1 --group-separator="$(printf hello\\nfedorqui)" 'hello' a
hello
this is me
hello
fedorqui
something else
hello hello
bye
一つの利点は、私たちが使用していることです。二重引用符。 (それで可変拡張などが機能します)