
grep
バックスラッシュでエスケープされた複数行を長い 1 行として扱うようなツールを作成するにはどうすればよいでしょうか?
次のようなファイルがあるとします。
testvar=test1 \
test2 \
test3
othervar=oth1 \
oth2
testvar の場合、grep
戻りますtestvar=test1 \
が、戻り値を取得する方法はありますかtestvar=test1 test2 test3
?
複数のエスケープされた行を 1 行として扱うにはどうすればよいのでしょうか?
注記: でこれができない場合は、や などの他のツールを使用して同じ結果を得るgrep
方法についてのヒントも歓迎します。sed
awk
答え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 ...