使用grep调整时间码

时间:2016-07-25 16:58:29

标签: sed grep

我正在尝试将从一种格式找到的时间码更改为另一种格式,基本上是删除文件末尾的毫秒并更新它。这是为了从转录时间码软件中删除额外的毫秒数,并使其看起来非常适合客户端文件。

输入看起来像这样:

memory_order_relaxed

所以我正在尝试使用grep来匹配时间码并使用下面的表达式。

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

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

输出如下:

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

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

我还尝试使用sed和以下命令:

00:50:34
00:50:35

我得到输出但是在我的RegExp中放入时间码应该是的位置。有任何想法吗?另外,在更新文件之前,如何修剪时间码最右侧的最后3位数?

非常感谢任何提示或建议。

谢谢: - )

1 个答案:

答案 0 :(得分: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,匹配先前模式的字符串将替换为捕获的字符(时间码不带毫秒)。