2016-07-25 27 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