web-dev-qa-db-ja.com

ファイルから末尾の空白を取り除く

sedで末尾の空白を削除する への答えはほとんどの答えを持っていますが、私は欲しいです

sed -i 's/[ \t]*$//' $1

コマンドラインでシェルスクリプトとして任意の数のファイル引数(glob引数を含む)を取得できるようにするため。つまりスクリプトの名前がstrip_trailing_whitespaceであるとします。次に、両方を実行できるようにしたいと思います

strip_trailing_whitespace foo.cc bar.cc

そして

strip_trailing_whitespace *.cc *.hh

*.ccおよび*.hhの形式のすべてのファイルから末尾の空白を削除します。上記の引用に基づいていない引数も問題ありません。

9
Faheem Mitha

$1位置パラメータ ;です。スクリプトに渡された最初の引数に展開されます。同様に$2$3...$9${10}${11}、...

特別なパラメーター"$@"は、all位置パラメータのリストに展開されます。

したがって、次のことができます。

sed -i 's/[ \t]*$//' "$@"

このスクリプト(または任意のプログラム)にグロブ/パターンを渡す場合は、スクリプトを呼び出すときにエスケープまたは引用符で囲む必要があります。これはシェルの機能です。スクリプトで認識される前に、パターンが展開されます。このケースではそれは必要ありません-シェルはパターンを展開でき、その展開の結果はすべてsedに渡されます。

12
Shawn J. Goff

次のようにxargsでsedを使用するのは簡単です。

find . -name "*.xml" | xargs sed -i 's/[ \t]*$//'

find . -type f | grep cc | xargs sed -i 's/[ \t]*$//'

8