grep でエスケープされた複数行を単一行として扱うようにできますか?

grep でエスケープされた複数行を単一行として扱うようにできますか?

grepバックスラッシュでエスケープされた複数行を長い 1 行として扱うようなツールを作成するにはどうすればよいでしょうか?

次のようなファイルがあるとします。

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

testvar の場合、grep戻りますtestvar=test1 \が、戻り値を取得する方法はありますかtestvar=test1 test2 test3?

複数のエスケープされた行を 1 行として扱うにはどうすればよいのでしょうか?

注記: でこれができない場合は、や などの他のツールを使用して同じ結果を得るgrep方法についてのヒントも歓迎します。sedawk

答え1

awkフィールド区切り文字とレコード区切り文字をユースケースに合わせて設定します。

awk 'BEGIN { FS="\n"; RS ="" } /testvar/' yourfile
testvar=test1 \
        test2 \
        test3

マニュアルのエントリを参照してください複数行レコード

答え2

次のように、これらの行を結合する何かを使用して前処理することができます。

awk 'match($0,/\\+$/) && RLENGTH % 2 {
       sub(/\\$/,""); printf "%s", $0; next
     }
     {print}' | grep ...

関連情報