如何用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
相关产品推荐
相关产品推荐

