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

如何用grep提取mkv文件路径并去除路径前的点符号?

移除grep输出路径开头的./前缀

问题场景

我尝试从mkv.md文件中提取所有带.mkv扩展名的文件路径,执行了以下命令:

grep -i 'mkv' mkv.md

得到的输出结果里,每个路径前都带有./前缀:

./Volumes/Transcend/Downloads/The.Adventure.of.English.Ep4.mkv ./Volumes/Transcend/Downloads/The.Adventure.of.English.Ep5.mkv ./Volumes/Transcend/Downloads/The.Adventure.of.English.Ep6.mkv ...

但我需要的是不带开头点符号的完整路径,比如/Volumes/Transcend/Downloads/The.Adventure.of.English.Ep4.mkv。

解决方案

这里有几种简单实用的方法可以实现需求:

方法1:用sed做字符串替换

把grep的输出通过管道传给sed,直接替换掉行首的./:

grep -i 'mkv' mkv.md | sed 's/^\.\///'

这个sed命令的逻辑是:^匹配行的开头,\.\转义匹配点符号,\/转义匹配斜杠,把这个组合替换成空字符串,就去掉了多余的前缀。

方法2:用awk处理输出

awk同样能轻松搞定,两种写法可选:

  • 用sub函数替换行首的./(更稳妥,兼容无前缀的行):
grep -i 'mkv' mkv.md | awk '{sub(/^\.\//, "", $0); print}'
  • 直接截取字符串从第3位开始(因为./占2个字符):
grep -i 'mkv' mkv.md | awk '{print substr($0,3)}'

方法3:GNU grep直接匹配目标部分

如果你用的是GNU grep(Linux系统默认,macOS需安装后用ggrep),可以用Perl兼容正则的正向预查直接输出想要的部分:

grep -ioP '(?<=\./).*\.mkv' mkv.md

参数说明:

  • -i:忽略大小写匹配
  • -o:只输出匹配到的内容,而非整行
  • -P:启用Perl兼容正则表达式
  • (?<=\./):正向预查,确保匹配内容前是./
  • .*\.mkv:匹配到.mkv结尾的完整路径部分

这样就能直接得到不带./的路径了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:43