ワイルドカードパスで一致するものを再利用できるかどうか疑問に思います。 (通常は正規表現の交換で行うことができますか?)
次の例には他の回避策があることがわかりましたが、私が要求する内容の例にすぎません。現在のフォルダにファイルがあり、名前を、file_1.txt, file_2.txt, ..., file_100.txt
に変更したいとしましょう。一致させることはできますが、ターゲットファイル名を指定するために一致するものを何らかの方法で再利用できますか?asdf_1_qwer.txt
asdf_2_qwer.txt, ..., asdf_100_qwer.txt
file_*.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"