如何grep多行直到; (分号)

时间:2017-08-28 14:22:56

标签: regex awk grep

我想要以printf开头的grep行,但它不能在该行结束,它可以有更多行\(反斜杠)。 例如,

printf("%s %s %s", \
        "one more line", \
        "second one", \
        "third one");

是的,我们可以使用选项-A(之后),但它也可以包含无意义的行,因为它指定了要输出的行数。

如果你有一个好主意要解决,请告诉我。 感谢。

2 个答案:

答案 0 :(得分:2)

我不知道用grep做的方法。

如果您允许使用perl等工具,还有更多选项:

perl -ne 'print if /^printf/ .. /;/' input.txt

如果找到以printf开头的行,则会与所有后续行一起打印,直到找到;

或者:

perl -ne 'print if /^printf/ .. !/\\$/' input.txt

相同的逻辑,但停止条件是不以\结尾的行。

答案 1 :(得分:0)

$ cat file
foo
printf("%s %s %s", \
        "one more line", \
        "second one", \
        "third one");
bar
$
$ awk '/printf/{f=1} f; !/\\$/{f=0}' file
printf("%s %s %s", \
        "one more line", \
        "second one", \
        "third one");
$