2017-05-03 3 views
0

これはしばらくの間見てきましたが、sedを使ってこれを行う方法の解決策を見つけることができないようです。ファイル名の中の文字を2番目のアンダースコアを含めて削除する方法

FILE_772829345_D594_242_25kd_kljd.mov

私は名前を変更したい

D594_242_25kd_kljd.mov私は現在、このために働くためにsedを取得しようとしてきた

が、持っている:私は、という名前のファイルを持っています

echo 'FILE_772829345_D594_242_25kd_kljd.mov' | sed 's/[^_]*//' 
_772829345_D594_242_25kd_kljd.mov 

どのようにすれば、同じ命令をもう一度やり直すことができますか? 2番目のアンダースコア?すべてのファイルが同様に命名された場合

+0

'sedのさん/ [^ _] * _ [^ _] * _ // '' – Rob

答えて

1

ファイル名が入っている場合シェル変数を使用する場合は、sedを使用する必要はなく、を使用して2番目のアンダースコアを調整してください:

filename="FILE_772829345_D594_242_25kd_kljd.mov" 
echo "${filename#*_*_}" # prints "D594_242_25kd_kljd.mov" 
ところで

、あなたが任意の名前の競合が存在する場合、上書きなったファイルを避けるために、その-iオプションを使用して、ファイルの名前を変更するmvを使用するつもりなら:

mv -i "$filename" "${filename#*_*_}" 
+0

私はこのメソッドを使用しました!うまくいきました...私のスクリプトが複数のファイルを受け入れる方法を見つけなければなりません。 'エコー "ここにファイルをドラッグしてください:" 読み取りファイル名 パス= $(dirnameは "$ {ファイル名}") ファイル= $(ベース名 "$ {ファイル名}") MV -i「$パス/ $をfile "" $ path/$ {file#* _ * _} "' –

+0

@DerekEdwards '-aファイル名を読み込みます。 "$ {filenames [@]}"のファイル名のために; do ... ... –

+0

ありがとう!それはうまくいった。それが何をしているのか説明できますか?私はそれに関係なくそれを調べます。 –

1

、あなたは正規表現でsedよりもずっと簡単になりますどのcutを使用することができます。

cut -f3- -d_ <<< "FILE_772829345_D594_242_25kd_kljd.mov" 

出力:

D594_242_25kd_kljd.mov 
関連する問題