ファイルの元の名前から文字の最初の2つのインスタンス間の部分に基づいてファイル名を変更します。

ファイルの元の名前から文字の最初の2つのインスタンス間の部分に基づいてファイル名を変更します。

最初の2つの「|」インスタンス間の文字列に基づいてファイル名を変更しようとしています。私の質問は次のとおりです。

>1234 |利子1|ランダムな数字1.txt

>5678 |利子2|randomstuff2.txt

>9101112 |興味3|randomstuff3|トリッキーなもの。txt

私が望む出力は次のとおりです。

興味1.txt

Interest2.txt

興味3.txt

正規表現と変数を使用してbashでいくつかの操作を試しましたが、目的の結果を得ることはできません。

とても感謝しています!

ベストアンサー1

Perlベースのrenameユーティリティを使用して、名前がパターンと一致するすべてのファイルの名前を変更します*interest*.txt。パイプシンボルの元の名前を分割し、最後に2番目の結果フィールドを追加して.txt各ファイルの名前を変更します。

rename -n -v '$_ = (split /\|/)[1] . ".txt"' *interest*.txt

-nコマンドが正しい新しい名前を出力することを確認した後、オプションを削除します。

質問に与えられた名前についてテストします。

$ ls -1
>1234|interest1|randomstuff1.txt
>5678|interest2|randomstuff2.txt
>9101112|interest3|randomstuff3|trickything.txt
$ rename -v '$_ = (split /\|/)[1] . ".txt"' *interest*.txt
>1234|interest1|randomstuff1.txt renamed as interest1.txt
>5678|interest2|randomstuff2.txt renamed as interest2.txt
>9101112|interest3|randomstuff3|trickything.txt renamed as interest3.txt
$ ls -1
interest1.txt
interest2.txt
interest3.txt

おすすめ記事