我可以让 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 ...

相关内容