2016-07-25 2 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 '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 

私は出力を得ることなく、タイムコードをすることになっている場所で、私の正規表現になります:

は、私はまた、次のコマンドを使用してsedを使用しようとしました。何か案は?また、ファイルを更新する前に、タイムコードの右端から最後の3桁をトリミングする方法は?

ご意見やご提案をいただければ幸いです。 GNUで

+0

あなたの質問は、その入力が与えられたときに期待される出力を含めるようにしてください。あなたが望むことをしないスクリプトを読んで、あなたがしたいことを確実に伝えることはできません。 –

+0

いつものように、ファイル内のその他のものには多くのものがあります。たぶん 'sed 's/\。[0-9] [0-9]> />/g''で十分でしょう。 –

答えて

1

:-)

おかげで、sedを:

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

説明:

$ 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オプションをファイルを編集するには

  • [0-9]{2}:は、2桁ごとに一致し、その後に:が続きます。 3つのすべての発生は、角括弧を使用してキャプチャされます。
  • \>\.[0-9]{2}は、>と一致し、その後にドットと2桁が続きます。
  • 逆参照\1を使用すると、以前のパターンに一致する文字列がキャプチャされた文字(ミリ秒のないタイムコード)に置き換えられます。
+0

Kali LinuxをUbuntu Linuxに変更しました。スクリプトはGNU sedスタイルを実行しています:-) [0-9] {2}構文の構文を簡潔にしていただきありがとうございます。 – EgoDust

+0

@エゴダストよろしくお願いします! – SLePort

関連する問題