ワイルドカード*を(bash?)スクリプトに渡します。

ワイルドカード*を(bash?)スクリプトに渡します。

中間サイズのテキストファイルのコレクションから「@n」、「@R」などのすべてのカラーコードを削除したいと思います。

だから私は "remove_cc"というファイルに次のように書きました。

sed -ie 's/@r//g' $1
sed -ie 's/@g//g' $1
sed -ie 's/@y//g' $1
sed -ie 's/@b//g' $1
sed -ie 's/@m//g' $1
sed -ie 's/@c//g' $1
sed -ie 's/@n//g' $1
sed -ie 's/@R//g' $1
sed -ie 's/@G//g' $1
sed -ie 's/@Y//g' $1
sed -ie 's/@B//g' $1
sed -ie 's/@M//g' $1
sed -ie 's/@C//g' $1
sed -ie 's/@N//g' $1
sed -ie 's/@W//g' $1
sed -ie 's/@K//g' $1

とにかく、次のように使用すると、スクリプトは完全に機能します。 ./remove_cc file.txt

ただし、多くのtxtファイルを含むフォルダに入って./remove_cc *.txtそのフォルダからスクリプトを実行しようとすると、何もしません。 ./remove_cc *また、無効です。

この問題を解決して動作する方法はありますか?

ベストアンサー1

と入力すると、./remove_cc *シェルはこれをに変更し、./remove_cc file1.txt file2.txt file3.txt etcそのようにスクリプトを実行します。スクリプトは$1最初のパラメータ(file1.txt)のみを確認します。

最も一般的なアプローチは、各パラメータを順番に繰り返すことです。ループオーバー"$@"に使用できるすべての引数のリストに展開されます。for

for n in "$@" ; do
    sed -ie 's/@r//g' "$n"
    ...
done

この特別なケースではsed複数のファイル名を使用するため、以下を簡素化できます。

sed -ie 's/@r//g' "$@"

シェルスクリプトを作成するときは、引用符に注意することが重要です。たとえば、引用符がない場合、スクリプトは名前がMy Text File.txt

おすすめ記事