grep
バックスラッシュでエスケープされた複数行を長い単一行として処理するなどのツールを作成する方法は?
次のようなファイルがあるとしましょう。
testvar=test1 \
test2 \
test3
othervar=oth1 \
oth2
今grep
testvarを実行すると返されますが、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 ...