
Как заставить такие инструменты grep
обрабатывать многострочные символы, экранированные обратной косой чертой, как одну длинную строку?
Допустим, у меня есть файлы, которые выглядят примерно так:
testvar=test1 \
test2 \
test3
othervar=oth1 \
oth2
Если я сейчас grep
вызову testvar, то он вернется testvar=test1 \
, но есть ли способ заставить его вернуться testvar=test1 test2 test3
?
Как более или менее обработать эти несколько экранированных строк как одну строку?
Примечание: Если это невозможно сделать с помощью 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 ...