Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何grep多行直到;(分号)_Regex_Awk_Grep - Fatal编程技术网

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

Regex 如何grep多行直到;(分号),regex,awk,grep,Regex,Awk,Grep,我想grep以printf开头的行,但是它不能在该行结束,它可以有更多带有\(反斜杠)的行。 比如说, printf("%s %s %s", \ "one more line", \ "second one", \ "third one"); 是的,我们可以使用选项-A(After),但它也可以包括无意义的行,因为它指定了输出的行数 如果你有什么好主意要解决,请告诉我。 谢谢。我不知道用grep怎么做 如果您允许使用perl等工具,则有更多选项:

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

printf("%s %s %s", \
        "one more line", \
        "second one", \
        "third one");
是的,我们可以使用选项
-A
(After),但它也可以包括无意义的行,因为它指定了输出的行数

如果你有什么好主意要解决,请告诉我。
谢谢。

我不知道用grep怎么做

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

perl -ne 'print if /^printf/ .. /;/' input.txt
如果找到以
printf
开头的行,则该行将与以下所有行一起打印,直到出现
已找到

或:


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

结尾。我不知道用grep怎么做

$ 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");
$
如果您允许使用perl等工具,则有更多选项:

perl -ne 'print if /^printf/ .. /;/' input.txt
如果找到以
printf
开头的行,则该行将与以下所有行一起打印,直到出现
已找到

或:


同样的逻辑,但是停止条件是一行没有以
\

结尾的,谢谢你的回答。但我还有另外一个问题。如果我想以quickfix的形式打印出它的文件名和行号(就像grep对选项-nH???@windrg00未测试一样,但是应该可以使用
perl-ne'print“$ARGV:$。:$”if/^printf/.!/\\$/}继续吗{close ARGV if eof'…
。谢谢你的回答。但是我还有另外一个问题。如果我想以quickfix的形式打印它的文件名和行号,该怎么办(就像grep使用选项-nH???@windrg00未测试一样,但是应该可以使用
perl-ne'print“$ARGV:$。:$”if/^printf/。!/\$/}继续吗{如果eof'..关闭ARGV
$ 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");
$