リスト内のファイルから拡張子を削除する

リスト内のファイルから拡張子を削除する

ファイルを含む「file.list」のリストがあります.bed.bed"file.list"ファイルから拡張子を削除したいです。

私はそれを試しましたが、sed -i 's/.bed//g' file.list動作しません。

答え1

file.list説明した方法でファイルの内容を変更するには、次のようにします。

sed 's/\.bed *$//' file.list >file.list.tmp && mv file.list.tmp file.list

これはすべての実装に適用されますsed-iコマンドラインフラグは実装間で移植可能ではないため悪名高いですsed)。結果を一時ファイルに書き込んでエラーが発生しない場合(ディスク容量不足など)、元のファイルはこの一時ファイルに置き換えられます。

この式は各行の末尾から文字列を削除しますs/\.bed *$//.bedまた、末尾のスペースも許可されます(これも削除されます)。


実際の名前を変更する文書1行に1つのファイル名を想定してに一覧表示されますfile.list

while IFS= read -r name; do
    echo mv "$name" "${name%.bed}"
done <file.list

これにより、echo名前の変更が実際に発生するのを防ぎます。まず、その場所で一度実行して動作することを確認する必要があります。

変数置換は${name%.bed}値の終わり(読み取った行)から削除されます。.bed$namefile.list

答え2

私が見るには、file.listにファイルのリストがあり、そのファイルの名前を.bedサフィックスに変更して実際のファイルから削除するだけです。

xargs -d'\n' -a file.list rename -n 's/\.bed$//'

関連情報