正解はsedを使用して末尾のスペースを削除するすでにほとんどの答えがありますが、私は
sed -i 's/[ \t]*$//' $1
glob引数を含むコマンドラインからシェルスクリプトに必要な数のファイル引数を渡す機能。つまり、スクリプトがだと仮定しますstrip_trailing_whitespace
。その後、これらの両方を実行できるようにしたいです。
strip_trailing_whitespace foo.cc bar.cc
そして
strip_trailing_whitespace *.cc *.hh
*.cc
sum形式のすべてのファイルから末尾のスペースを削除します*.hh
。上記の回答に基づいていない主張も問題ありません。
答え1
$1
は位置パラメータ;スクリプトに渡された最初の引数に展開されます。同様のものには$2
、$3
... $9
、、、、${10}
...が含まれます。${11}
これ特殊パラメータ "$@"
リストに展開されますみんな位置パラメータ。
したがって、次のことができます。
sed -i 's/[ \t]*$//' "$@"
このスクリプト(またはすべてのプログラム)にglob /パターンを渡すには、スクリプトを呼び出すときにエスケープまたは引用符を付ける必要があります。これは、スクリプトがパターンを表示する前に拡張されるシェルの機能です。この場合、これは必要ありません。シェルはパターンを拡張でき、拡張結果はすべてに渡されますsed
。
答え2
次のようにxargsでsedを使用するのは簡単です。
find . -name "*.xml" | xargs sed -i 's/[ \t]*$//'
find . -type f | grep cc | xargs sed -i 's/[ \t]*$//'