grepにエスケープされた複数行を単一行として処理させることはできますか?

grepにエスケープされた複数行を単一行として処理させることはできますか?

grepバックスラッシュでエスケープされた複数行を長い単一行として処理するなどのツールを作成する方法は?

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

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

greptestvarを実行すると返されますが、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 ...

関連情報