Shell Script – Strip Trailing Whitespace from Files

sedshell-scriptwhitespace

The answer to removing trailing whitespace with sed has most of the answer, but I want

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

to be able to take arbitrary number of file arguments as a shell script on the command line, including glob arguments. I.e. suppose the script is called strip_trailing_whitespace. Then I'd like to be able to do both

strip_trailing_whitespace foo.cc bar.cc

and

strip_trailing_whitespace *.cc *.hh

to strip trailing whitespaces from all files of the form *.cc and *.hh. Arguments not based on the answer quoted above are also fine.

Best Answer

$1 is a positional parameter; it will expand to the first argument passed to the script. There are similarly $2, $3...$9, ${10}, ${11},...

The special parameter "$@" will expand to a list of all the positional parameters.

So you can do the following:

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

If you want to pass a glob/pattern to this script (or to any program), it must be escaped or quoted when you call the script - this is a function of the shell; it will expand any patterns before your script even sees it. This case shouldn't need that - the shell can expand the pattern, and the results of that expansion all get passed to sed.

Related Question