我希望删除电影文件中 4 位年份之后的所有文字:
输入:
Some.Movie.Name.2011.1080p.BluRay.x265.mp4
Another.Movie.Name.1999.1080p.BluRay.x264.mp4
Another.Movie.Name.II.2001.1080p.BluRay.x264.mp4
所需输出:
Some.Movie.Name.2011
Another.Movie.Name.1999
Another.Movie.Name.II.2001
我已将 awk 与正则表达式一起使用:
echo "Some.Movie.Name.2011.1080p.BluRay.x265.mp4" |awk -F'.[0-9]{4}' '{print$1}'
这给了我:
Some.Movie.Name
我无法找到使用 awk 或其他任何方法来打印 4 位年份分隔符的方法。
答案1
你可以使用
sed -E "s/(.*\.[[:digit:]]{4})\..*/\1/"
去实现你的追求。
回查
for f in Some.Movie.Name.2011.1080p.BluRay.x265.mp4 Another.Movie.Name.1999.1080p.BluRay.x264.mp4 Another.Movie.Name.II.2001.1080p.BluRay.x264.mp4 ; do
echo $f | sed -E "s/(.*\.[[:digit:]]{4})\..*/\1/"
done
产生您想要的输出。
解释
该模式允许 sed 查找用[[:digit:]]{4}
点 ( ) 括起来的四位数字 ( \.
) 以及.*
该模式前后的任何内容 ( )。前面的任何内容(包括数字,不包括四位数字后面的点)都被视为一个组,因此使用括号()
。该组在替换中用 反向引用\1
。