regex - 如何使用 sed/regex 查找最后的多行匹配项?

标签 regex linux sed

这是一个 commands.txt 文件:

START - 'cmd1'
results1a
results1b
results1c
END - 'cmd1'
START - 'cmd2'
results2a
results2b
END - 'cmd1'
START - 'cmd1'
results1d
results1e
results1f
END - 'cmd1'

这是我目前所拥有的:

cat commands.txt | sed -n 's/^START - '"'"'(cmd1)'"'"'$/\1/p'

输出是

cmd1
cmd1

我想要的输出是

results1d
results1e
results1f

我还没有想出如何获得多行匹配。

最佳答案

此行可满足您的需求:

awk "NR==FNR{if(/^START - 'cmd1'/)p=NR;next}FNR>p{if(/^END/)exit;print}" file file

您可以使正则表达式更严格,例如使用 ^ 和 $,但您知道如何处理它。

关于regex - 如何使用 sed/regex 查找最后的多行匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21688266/

相关文章:

linux - 从文件中删除带有日文字符的行

sed - Unix - 使用正则表达式分割为 N 个文件来命名目标文件

regex - 如何使用正则表达式匹配字符串中的第 n 次出现

linux - 检查当前激活的 conda 环境

linux - 为什么在将原始字节数据发送到 TAP 设备时前导 4 字节数据丢失?

c# - 是否可以在将在 Linux 中运行的 .Net Core 控制台应用程序中使用 .Net Framework 4.5 Dll 引用

python - 巨大的文本文件 (6Gb) 搜索和替换

regex - 查找至少包含一组的所有子串

regex - htaccess - 包含特定字符串部分的重定向字符串

c# - 负向查找后面带有未知数量的空格