awk:显示匹配的正则表达式(多行)

我有一个看起来像这样的文件:

SF:/home/developer/project/test/resources/somefile.js

DA:1,2

DA:3,2

end_of_record

SF:/home/developer/project/src/resources/otherfile.js

DA:9,2

DA:15,2

DA:22,2

end_of_record

...some more SF:/home/xxx and end_of_record lines...

该文件包含以开头SF:

...和结尾的块end_of_record。请注意,(DA:x,x)之间的行数可以不同。我想在第一行中打印所有带有字符串“

test”的块(例如此处的“ SF:/ home / developer / / resources /

…”)。对于此示例,我想要的输出将是:

SF:/home/developer/project/test/resources/somefile.js

DA:1,2

DA:3,2

end_of_record

我想在 环境中执行此操作。

我的第一个尝试是使用“ sed”命令执行此操作,但是经过一些研究,似乎“ awk”是执行多行操作的更合适工具。

使用awk和Regex,这是我到目前为止的命令:

awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile

但是它输出完整的examplefile,不仅输出第一行中包含“

test”的块。我不确定我的正则表达式是否错误,或者我是否在awk通话中遗漏了一些东西。

我如何只获得第一行中带有“ test”的块?

回答:

您需要一个标志:

awk '/^SF.*test.*/{f=1}f;/end_of_record/{f=0}' yourFile

以上是 awk:显示匹配的正则表达式(多行) 的全部内容, 来源链接: utcz.com/qa/421537.html

回到顶部