最初の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