如何批量删除无人机GPS捕获文本中固定模式的日期时间行?
批量删除无人机GPS文本中的日期时间行
问题描述
有一段无人机GPS捕获的SRT格式文本,需要删除所有包含日期时间的行。这些待删除行的位置有固定规律:行号为4、10、16、22、28……(每6行出现一次,第4行是第一个目标行)。之前使用指定日期的正则表达式处理,但每次更换文件都要手动修改日期,需要无需指定日期的通用解决方案。
原始文本示例:
1 00:00:00,000 --> 00:00:00,033 <font size="36">FrameCnt : 1, DiffTime : 33ms 2022-10-08 10:39:34,664,324 [iso : 100] [shutter : 1/1000.0] [fnum : 280] [ev : -0.7] [ct : 4878] [color_md : default] [focal_len : 280] [latitude : 25.726788] [longtitude : 76.246599] [altitude: 334.510010] </font> 2 00:00:00,033 --> 00:00:00,066 <font size="36">FrameCnt : 2, DiffTime : 33ms 2022-10-08 10:39:34,697,694 [iso : 100] [shutter : 1/1000.0] [fnum : 280] [ev : -0.7] [ct : 4878] [color_md : default] [focal_len : 280] [latitude : 25.726788] [longtitude : 76.246599] [altitude: 334.510010] </font> ...
期望输出示例:
1 00:00:00,000 --> 00:00:00,033 <font size="36">FrameCnt : 1, DiffTime : 33ms [iso : 100] [shutter : 1/1000.0] [fnum : 280] [ev : -0.7] [ct : 4878] [color_md : default] [focal_len : 280] [latitude : 25.726788] [longtitude : 76.246599] [altitude: 334.510010] </font> 2 00:00:00,033 --> 00:00:00,066 <font size="36">FrameCnt : 2, DiffTime : 33ms [iso : 100] [shutter : 1/1000.0] [fnum : 280] [ev : -0.7] [ct : 4878] [color_md : default] [focal_len : 280] [latitude : 25.726788] [longtitude : 76.246599] [altitude: 334.510010] </font> ...
解决方案
方案1:基于固定行位置删除
利用目标行的位置规律,直接用sed命令定位删除:
sed '4~6d' input.srt > output.srt
4~6表示从第4行开始,每隔6行删除一行,精准匹配4、10、16...这些目标行号。
方案2:基于正则匹配日期时间行(通用无日期限制)
如果行位置可能变动,用正则匹配所有符合格式的日期时间行,无需指定具体日期:
正则表达式
^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}$
^\d{4}-\d{2}-\d{2}:匹配开头的YYYY-MM-DD格式日期\d{2}:\d{2}:\d{2}:匹配空格后的HH:MM:SS格式时间,\d{3}$:匹配结尾的三位毫秒数
工具使用示例
- 用
sed处理:# 部分sed版本需加-E启用扩展正则 sed -E '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}$/d' input.srt > output.srt - 用编辑器替换:在VS Code等编辑器中开启正则模式,输入上述正则表达式作为查找内容,替换内容留空,点击全部替换即可。
内容的提问来源于stack exchange,提问作者Amir Khan
相关产品推荐
相关产品推荐

