Можно ли заставить grep обрабатывать экранированную многострочную строку как одну строку?

Можно ли заставить grep обрабатывать экранированную многострочную строку как одну строку?

Как заставить такие инструменты 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 ...

Связанный контент