ファイル名の先頭と末尾から文字パターンを削除する

ファイル名の先頭と末尾から文字パターンを削除する

名前を変更したいファイルがたくさんあります。ファイル名は特定の形式に従います。

p1.uniquenameA#blah_a
p2.uniquenameB#blah_b
p3.uniquenameC#blah_c
p4.uniquenameD#blah_d
p5.uniquenameE#blah_e
p6.uniquenameF#blah_f
p7.uniquenameG#blah_g
p8.uniquenameH#blah_h
p9.uniquenameI#blah_i
p10.uniquenameJ#blah_j

各固有のファイル名の前にはプレフィックスが付いています。この場合、プレフィックスは文字で始まり、その後に1ずつ増加するp数字が続きます。pピリオド(.)はプレフィックスと一意のファイル名を区別します。各固有ファイル名の後には、ハッシュタグ()で#始まるサフィックスが続きます。ピリオド(ピリオドを含む)で始まる接頭辞を削除し、ハッシュタグ(ハッシュタグを含む)で始まるサフィックスも削除したいと思います。生成されたファイル名は、ピリオドとハッシュタグの間の一意のファイル名であることを望みます。

uniquenameA
uniquenameB
uniquenameC
uniquenameD
uniquenameE
uniquenameF
uniquenameG
uniquenameH
uniquenameI
uniquenameJ

私はスクリプトが初めてなので、コードを提供するだけでなく、コードがどのように機能するかを説明していただきありがとうございます。

ベストアンサー1

perlバージョンrenameがある場合がある場合はprename正規表現置換を適用できます。

rename -n 's/^.*?\.(.*?)#.*/$1/' *

正規表現(RE)がわからない場合は学ぶ価値があります。

  • s/xx/yy/- 使用。 。 。xx交換yy
  • ^- 行の暗黙的な開始と一致します。
  • .*?- できるだけ短い文字列と一致0個以上の文字残りのパターンマッチングが適用されます。
  • \.- テキストポイントの一致..文字は何もない、しかし\.文字通りのポイントです)
  • (...)角かっこ内のパターンと一致し、後で引用される一致番号1..9を割り当てます$1(2番目の(...は等に)なります$2)。
  • #- テキスト文字
  • .*- 最長のゲームは0個以上の文字.これは何もない*前のエントリは_zero以上を意味します)

-n満足のいくものを削除してください(「アクションなし」)。会議働く-v実際に何が起こるかを見るには、交換するか、自動操作のために無視してください。

おすすめ記事