中間サイズのテキストファイルのコレクションから「@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
。