何百ものファイルがあり、すべて同じテンプレートに従う名前を持っています。
results_20210503_input003_run017_cluster003.txt
Bashで部分文字列を並べ替える有効な方法ですか?
results_input003_cluster003_run017_20210503.txt
cut -f$i
を使用して各フィールドをインポートしてから、をmv
使用してファイルの名前を変更しようとしましたが、それは間違って見えます。
ベストアンサー1
使用Perlのrename
コマンドラインツール(オペレーティングシステムによっては、またはとrename
呼ばれる場合があります):perl-rename
prename
rename 's/(results)(_[0-9]{8})(.*)(\.txt)/$1$3$2$4/' results*txt
-n
名前の変更を表示するには - フラグを使用してテストを実行してみてください。
仕組み:
s/A/B/
- ファイル名のパターン A をパターン B に置き換えます。- 括弧内のパターンには、発生時にインデックス番号が割り当てられます。
- グループ化には以下が含まれます。 1)
results
:リテラル「結果」。 2)_[0-9]{8}
:下線の後に0から9までの8桁の数字。 3).*
. =すべての文字、* =可能な限り前の入力を繰り返します。 4)\.txt
リテラル「.txt」は.
エスケープする必要があります。それ以外の場合(3)のように「すべての文字」になります。 - 必要に応じてパターングループを並べ替えます。以下を参照してください。
$<ID>