如何用sed删除两个revolving_door_cad匹配模式间的行(保留第二个模式)
解决sed删除首个匹配模式到下一个匹配模式间内容(保留第二个模式)的问题
问题说明
需要删除文件中从第一个匹配revolving_door_cad的行到下一个该模式出现的行之间的所有内容(包含第一个匹配行),仅保留第二个匹配行及之后的内容。原命令sed '/revolving_door_cad/,/revolving_door_cad/{//!d;}' file会保留两个匹配行,无法满足需求。
解决方案
使用带循环与替换逻辑的sed命令:
sed '/revolving_door_cad/{:a;N;/revolving_door_cad/!ba;s/.*\n//}' your_file
命令拆解
/revolving_door_cad/{ ... }:匹配到第一个目标模式时,执行大括号内的操作:a:定义循环标签aN:将下一行内容追加到当前模式空间(合并当前行与下一行)/revolving_door_cad/!ba:若模式空间中未找到第二个目标模式,跳回标签a继续读取下一行s/.*\n//:找到第二个目标模式后,将模式空间内从开头到第二个匹配行前的所有内容(含第一个匹配行和中间行)清空,仅保留第二个匹配行及后续内容
示例验证
原文件内容
..... ..... 'revolving_door_cad': { 'id': 'as-hp-pass-files', 'labels': { 'name': 'jonah', 'type': 'File', 'Eligible': 'true', 'Applied': 'ransomware' }, 'data': { 'file.pcx': 'home/work/300029_LATAM/PROD-AS-ransomware/account', }, }, 'revolving_door_cad': { .... ....
执行命令后输出
'revolving_door_cad': { .... ....
内容的提问来源于stack exchange,提问作者Chel MS
相关产品推荐
相关产品推荐

