如何在Bash脚本中移除文本列表中不含年份(YYYY)的行?
移除不含年份(YYYY)的影片条目方法
针对你的需求,这里给几个简单易上手的Bash命令实现,适合新手操作:
方法1:用grep(最直观)
grep可以直接筛选出包含符合格式年份的行,命令如下:
grep -E '\((19|20)[0-9]{2}\)' 你的影片列表.txt
解释:
-E表示使用扩展正则表达式,方便编写复杂匹配规则\(和\)是转义括号,因为括号在正则里有特殊含义,要匹配实际的括号就得转义(19|20)匹配年份开头的19或20(影片年份大多在这个区间,避免误匹配其他四位数字)[0-9]{2}匹配后面两位数字,凑成完整的四位数年份
如果要直接把筛选结果覆盖原文件(记得先备份原文件!),可以用:
grep -E '\((19|20)[0-9]{2}\)' 你的影片列表.txt > temp.txt && mv temp.txt 你的影片列表.txt
方法2:用awk
awk的语法简洁,只要行匹配正则就自动打印:
awk '/\((19|20)[0-9]{2}\)/' 你的影片列表.txt
解释:
- awk里
//包裹的是匹配规则,只要行符合这个正则,就会执行默认的print动作,输出该行
方法3:用sed
sed可以删除不符合条件的行,留下符合要求的内容:
sed -n '/\((19|20)[0-9]{2}\)/p' 你的影片列表.txt
或者另一种更直白的写法(删除不匹配的行):
sed '/\((19|20)[0-9]{2}\)/!d' 你的影片列表.txt
解释:
- 第一种写法里,
-n让sed不默认输出所有行,p表示只打印匹配正则的行 - 第二种写法里,
!d表示对不匹配正则的行执行删除操作,剩下的就是符合要求的行
额外提示:
如果你的影片里有18xx年份的老片,可以把正则改成\([0-9]{4}\),不过这样可能会误匹配其他带四位数字括号的文件名,所以优先用(19|20)[0-9]{2}更精准。操作文件前一定要先备份原文件,避免数据丢失!
内容的提问来源于stack exchange,提问作者Thystra
相关产品推荐
相关产品推荐

