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

标签 regex linux 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 结尾的 block 组成。请注意,(DA:x,x) 之间的行数可能不同。我想打印所有在第一行有字符串“test”的 block (比如这里的“SF:/home/developer/test/resources/...”)。对于这个例子,我想要的输出是:

SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record

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

我的第一个尝试是使用“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”的 block 。我不确定我的正则表达式是否有误,或者我是否在 awk 调用中遗漏了某些内容。

如何只获取第一行带有“test”的 block ?

最佳答案

你需要一面旗帜:

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

关于regex - awk:显示匹配的正则表达式(多行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12389421/

相关文章:

javascript - 正则表达式:对句子中的小数、缩写和缩写词进行分词

linux - 获取 Linux 内核模块中现有设备类(结构类)的指针

linux - Awk 命令行将参数编写为变量以搜索特定字段

c++ - 与 Boost 的正则表达式区分大小写的部分匹配

用于将分隔符替换为 : or $ 的 Java 正则表达式

linux - 使用 make 编译期间未找到头文件 (Linux)

json - 如何使用 Bash 删除 json 文件中的最后一个逗号?

awk : an other way more elegant to do it ? 看到里面了吗?

Java 正则表达式匹配器问题

linux - rest api 中的 curl 身份验证失败