如何删除从eng.md文件中捕获的元素?附grep列出的.mkv文件列表
如何从eng.md文件中删除捕获到的MKV文件路径行?
看起来你已经用grep -i 'mkv' eng.md定位到了所有包含MKV文件路径的行,现在要把这些行从eng.md里删掉对吧?这里有几个简单可靠的方法,你可以根据自己的情况选:
方法一:直接用sed删除匹配行(最简单)
如果你要删除所有包含"mkv"(不区分大小写)的行,直接用sed命令就行,它会帮你原地修改文件,还能自动备份原文件防止误操作:
# Mac系统(需要指定备份后缀,这里用.bak) sed -i.bak '/mkv/I d' eng.md # Linux系统(可以直接原地修改,可选加备份) sed -i '/mkv/I d' eng.md
解释一下参数:
-i.bak:原地修改文件,同时生成一个名为eng.md.bak的备份文件,万一操作错了还能恢复/mkv/I:匹配包含"mkv"的行,I表示不区分大小写(比如匹配MKV、Mkv都可以)d:删除匹配到的行
执行完后,你可以用grep -i 'mkv' eng.md检查一下,应该就找不到那些MKV路径行了。
方法二:精确删除grep捕获到的特定行(适合需要精准匹配的情况)
如果有些包含mkv的行你不想删,只想删除这次grep捕获到的那些特定路径行,可以这么做:
- 先把grep捕获到的所有行导出到一个临时文件里:
grep -i 'mkv' eng.md > temp_mkv_lines.txt
⚠️ 注意:如果你的终端输出里有截断的行(比如./Volumes/Transcend/Downloads/._The.Ad...),打开temp_mkv_lines.txt确认一下内容是不是完整的——终端显示截断只是因为行太长,实际文件里的行应该是完整的,这个不用担心。
- 用grep反向匹配,把不包含这些特定行的内容写入新文件,再替换原文件:
grep -v -xFf temp_mkv_lines.txt eng.md > eng_clean.md && mv eng_clean.md eng.md
参数解释:
-v:反向匹配,只输出不匹配的行-x:整行精确匹配,不会出现部分匹配误删的情况-F:把临时文件里的内容当作固定字符串,不是正则表达式,避免路径里的特殊字符(比如.)被当作正则处理-f:从temp_mkv_lines.txt里读取要匹配的行模式
- 最后可以删掉临时文件:
rm temp_mkv_lines.txt
重要提醒
不管用哪种方法,操作前最好手动备份一下原文件,比如:
cp eng.md eng.md.backup
这样就算操作失误,也能从备份文件恢复。
内容的提问来源于stack exchange,提问作者user9062604
相关产品推荐
相关产品推荐

