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のコンテキスト「group-separator」として空行を使用する--group-separator=""
と言って、空行だけを取得する方法を学びました。
ただし、2つの空の行が必要な場合はどうなりますか? --group-separator="\n\n"
と言ってみましたが、文字どおり\n
sを取得しました。
$ grep -C1 --group-separator="\n\n" 'hello' a
hello
this is me
\n\n
something else
hello hello
bye
--group-separator="\nhello\n"
などの他の機能も機能しませんでした。
ああ、私はそれを見つけました、$''
の代わりに$""
構文を使用するだけです:
$ grep -C1 --group-separator=$'\n\n' 'hello' a
hello
this is me
something else
hello hello
bye
man bash
から:
引用
$ 'string'形式の単語は特別に扱われます。 Wordは文字列に展開され、バックスラッシュでエスケープされた文字はANSI C標準で指定されたとおりに置き換えられます。バックスラッシュエスケープシーケンスが存在する場合は、次のようにデコードされます。
(...) \n new line
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
1つの利点は、二重引用符を使用していることです。 (したがって、変数の展開などが機能します)