You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sed原地删除含指定后缀的行及其下一行

解决sed原地删除多模式行及其下一行的问题

核心问题分析

你之前的命令无效主要有三个原因:

  • 正则中的.未转义:在sed正则里,.代表任意字符,.mkv会匹配xmkv这类无关行,而非精确匹配包含.mkv的行。
  • 第二个命令存在语法错误:脚本中间插入的-e不符合sed语法规则,导致命令无法执行。
  • 不同系统的sed对-i参数处理有差异:GNU sed(Linux)和BSD sed(macOS)的-i用法不同。

正确的原地修改命令

适用于Linux(GNU sed)

可以用分组正则合并多个模式,写法更简洁:

sed -i '/\.\(mkv\|mp4\|avi\)/{N;d}' "${myfile}"

也可以拆分多个-e参数,逻辑更清晰:

sed -i -e '/\.mkv/{N;d}' -e '/\.mp4/{N;d}' -e '/\.avi/{N;d}' "${myfile}"

适用于macOS(BSD sed)

BSD sed要求-i后必须指定备份扩展名(空字符串表示不生成备份文件):

sed -i '' '/\.\(mkv\|mp4\|avi\)/{N;d}' "${myfile}"
# 或者拆分版本
sed -i '' -e '/\.mkv/{N;d}' -e '/\.mp4/{N;d}' -e '/\.avi/{N;d}' "${myfile}"

命令说明

  • \.\(mkv\|mp4\|avi\):转义.避免匹配任意字符,用\|分隔多个扩展名,精准匹配包含.mkv/.mp4/.avi的行。
  • {N;d}:N将下一行追加到当前模式空间,d删除模式空间中的内容(即当前匹配行+下一行)。
  • "${myfile}":用双引号包裹变量,避免文件名含空格时出现执行错误。

内容的提问来源于stack exchange,提问作者ni_hao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:04:54