Bash globbingで一致する値を再利用するには? [コピー]

Bash globbingで一致する値を再利用するには? [コピー]

ワイルドカードパスで一致するものを再利用できるかどうか疑問に思います。 (通常は正規表現の交換で行うことができますか?)

次の例には他の回避策があることがわかりましたが、私が要求する内容の例にすぎません。現在のフォルダにファイルがあり、名前を、file_1.txt, file_2.txt, ..., file_100.txtに変更したいとしましょう。一致させることはできますが、ターゲットファイル名を指定するために一致するものを何らかの方法で再利用できますか?asdf_1_qwer.txtasdf_2_qwer.txt, ..., asdf_100_qwer.txtfile_*.txt*

ベストアンサー1

シェルには正規表現キャプチャグループと直接同等のものはありませんが、説明する操作は通常変数を使用して実行されます。たとえば、

$ for f in file_*.txt; do
   number="${f/file_/}" 
   number="${number/.txt/}" 
   printf 'The number from file "%s" is "%d"\n' "$f" "$number"
done
The number from file "file_1.txt" is "1"
The number from file "file_2.txt" is "2"
The number from file "file_3.txt" is "3"

またはsed代わりに使用シェル文字列の操作:

$ for f in file_*.txt; do    
    number=$(sed -E 's/^file_([0-9]+)\.txt/\1/' <<<"$f"); 
    printf 'The number from file "%s" is "%d"\n' "$f" "$number"; 
done
The number from file "file_1.txt" is "1"
The number from file "file_2.txt" is "2"
The number from file "file_3.txt" is "3"

おすすめ記事