![我可以让 grep 将转义的多行视为单行吗?](https://linux22.com/image/31340/%E6%88%91%E5%8F%AF%E4%BB%A5%E8%AE%A9%20grep%20%E5%B0%86%E8%BD%AC%E4%B9%89%E7%9A%84%E5%A4%9A%E8%A1%8C%E8%A7%86%E4%B8%BA%E5%8D%95%E8%A1%8C%E5%90%97%EF%BC%9F.png)
如何制作像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 ...