如何删除含,32,的行及其上方对应含,34,的行?
解决方案:删除包含
,32,的行及其上方的,34,行 可以用以下sed命令实现需求,精准匹配并删除成对的,34,行和紧跟其后的,32,行:
sed '/,34,/{N;/\n.*,32,/d}' 源文件名 > 输出文件名
命令解释
/,34,/{...}:定位所有包含,34,的行,执行花括号内的逻辑N:将当前行的下一行读入模式空间,把两行合并为一个整体(中间以换行符分隔)/\n.*,32,/d:如果合并后的内容里存在换行符后跟,32,的情况,直接删除这一整组两行- 不满足条件的行会默认保留并输出
验证效果
用你的示例文件测试该命令,输出结果完全符合预期:
dd,34,dd 12:30 game2 dd,31,dd 12:32 game2 dd,34,dd 13:54 game3 dd,31,dd 13:55 game3
之前命令的问题分析
grep命令问题:
grep -v -B1 ',32,'逻辑上是先提取,32,行及其前一行,再反向排除这些行,但部分旧版本grep可能不支持-B(前向匹配)参数,或者实际文件中存在非成对的,34,行导致误判,可靠性不如sed方案。sed命令问题:
你使用的sed "/\,32\/,+1d"是删除,32,行及其下方一行,而需求是删除,32,行及其上方一行,方向完全搞反,因此得到错误输出。
内容的提问来源于stack exchange,提问作者user21006365
相关产品推荐
相关产品推荐

