如何匹配文本文件中MRATE并输出其到GRATE之间的行后终止读取
文本文件指定区间匹配输出方案
核心需求
对文本文件按如下规则处理:
- 匹配到字符串A
MRATE后,开始输出当前行及后续所有行,直到匹配到字符串BGRATE时停止当前片段输出 - 累计完成2次上述
MRATE到GRATE的片段输出后,直接终止文件读取,无需处理后续内容
预设字符串参考
String A: 'MRATE' String B: 'GRATE' String C: 'URATE'
输入文件内容示例
AAAA BBBB MRATE >>>>>>> First occurrence of String A TRATE SRATE GRATE QRATE MRATE >>>>>>> Second occurrence of String A ZRATE GRATE ZRATE URATE
预期输出效果
第一次匹配到MRATE时输出内容:
MRATE TRATE SRATE GRATE
第二次匹配到MRATE后输出到对应GRATE即可终止读取,后续内容无需处理。
实现方案(Linux/macOS 环境)
使用awk命令可直接满足需求,命令如下:
awk '/MRATE/{f=1;cnt++} f{print} /GRATE/{f=0;if(cnt>=2)exit}' 你的目标文件名.txt
命令逻辑说明:
- 匹配到
MRATE时,开启输出标记f=1,同时累计匹配次数cnt加1 - 输出标记为开启状态时,打印当前读取的行
- 匹配到
GRATE时,关闭输出标记,若累计匹配次数达到2次,直接退出程序终止文件读取
内容的提问来源于stack exchange,提问作者Novice_Coder
相关产品推荐
相关产品推荐

