Re: Editing Problem with bash script and sed
- Date: Tue, 14 Nov 2017 13:44:31 -0500
- From: Greg Wooledge <wooledg@xxxxxxxxxxx>
- Subject: Re: Editing Problem with bash script and sed
On Tue, Nov 14, 2017 at 07:21:55PM +0100, Thomas Schmitt wrote:
> ls -d * | grep "$1" | while read filename
Eww. No. That code is broken in multiple ways.
> n=$(echo "$fname" | sed -e s/"$1"//)
> Regrettably i found no way to make this safe against newlines in filenames.
> I'd do it in C language if such names were to be expected.
Well, the whole thing is a shambles. Just use rename(1) which is
designed for this.
rename 's/Badstring//' *Badstring*
The problems with using sed for this are numerous. There's no way to
tell sed that the string you're passing should be treated as an argument
to a command. All you can do is inject the user input directly into a
sed command. This means that if the user input contains any characters
that sed uses as syntax, you lose.
If you had to do this on a legacy Unix system without perl, then see