2016-07-25 82 views
0

我试图将发现的时间码从一种格式更改为另一种格式,基本上是为了消除文件末尾的毫秒数并对其进行更新。这是为了从转录时间码软件中删除额外的毫秒,并使其看起来非常适合客户端的文件。使用grep来调整时间码

输入如下:

00:50:34.00>INTERVIEWER 
Why was it ............... script? 

00:50:35.13>JOHN DOE 
Because of the quality. 

所以我想用grep匹配时间码,并得到了其与下面的表达式工作。

grep [0-9][0-9][:][0-9][0-9][:][0-9][0-9]\.[0-9][0-9] -P -o transcriptionFile.txt 

输出看起来是这样的:

00:50:34.00 
00:50:35.13 

所以现在我试图把时间码,并与像更新的值更新文件:

00:50:34 
00:50:35 

我该怎么办呢?我是否应该使用管道将其推送到sed,以便可以更新文件中的值?

我也尝试过使用与下面的命令的sed:

sed 's/[0-9][0-9][:][0-9][0-9][:][0-9][0-9]\.[0-9][0-9]/[0-9][0-9][:][0-9][0-9][:][0-9][0-9]/g' transcriptionFile.txt > outtranscriptionFile.txt 

我得到的输出,但放入我的正则表达式的地方,时间码应该是。有任何想法吗?另外如何在更新文件之前在时间码的最右侧修剪最后3位数字?

任何提示或建议将不胜感激。

感谢:-)

+0

[编辑]你的问题包括给定输入的预期输出。我们无法通过阅读不符合要求的脚本来确定要执行的操作。 –

+0

一如既往,很大程度上取决于文件中的其他内容。也许'sed's/\。[0-9] [0-9]> />/g''就足够了。 –

回答

1

随着GNU sed的:

$ sed -r 's/^([0-9]{2}:[0-9]{2}:[0-9]{2})\>\.[0-9]{2}/\1/' transcriptionFile.txt 

00:50:34>INTERVIEWER 
Why was it ............... script? 

00:50:35>JOHN DOE 
Because of the quality. 

编辑文件到位,添加-i选项:

sed -r -i 's/^([0-9]{2}:[0-9]{2}:[0-9]{2})\>\.[0-9]{2}/\1/' transcriptionFile.txt 

说明:

  • [0-9]{2}:每两位数字后跟一个:。所有这三个事件都使用括号捕获。
  • \>\.[0-9]{2}匹配>后跟一个点和两个数字。
  • 使用反向引用\1,与以前的模式相匹配的字符串被捕获的字符(没有毫秒的时间码)替换。
+0

从使用Kali Linux更改为Ubuntu Linux,现在脚本运行GNU sed风格并且正在工作:-) 感谢缩减[0-9] {2}语法的语法,使其更具可读性并使用反向引用也是一个不错的提示。 – EgoDust

+0

@EgoDust不客气! – SLePort