grep或pcregrep用于多行包装的文本模式

时间:2014-02-20 22:13:30

标签: regex grep

我需要一个带有行继续符(如'\')的文件中的模式匹配解决方案。我有一个包含命令的文件(我的第一个部分模式),然后是任意数量的换行符(零到N),然后是我搜索的第二个部分模式。

假设我找到任何命令行,其中包含cmd'mycmd'和参数'myarg'在同一行或任意数量的换行符后'\'。

档案:

xcmd xarg
xcmd \
 xarg
xcmd xarg yarg \
 myarg \
 zarg
mycmd myarg
mycmd \
 xarg
mycmd yarg
mycmd \
 myarg
mycmd zarg \
 myarg xarg \
 yarg

出于我的生物grep预期:

mycmd myarg
mycmd \
 myarg
mycmd zarg \
 myarg xarg \
 yarg

如果在打印输出中省略'\',我很好。

我的想法是有一个正则表达式,搜索“mycmd”后跟0到N'\ + CR'后跟'myarg'。

感谢您的帮助。 格特

1 个答案:

答案 0 :(得分:0)

你可以使用这个awk:

awk -v cmd="mycmd" -v arg="myarg" '
       $0 ~ cmd && $0 ~ arg {s=1; line=$0; next}
       s && /\\ *$/{line = line RS $0; next}
       s && !/\\ *$/{s=0; print line RS $0}' file