gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:39 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com