sed throws 'bad flag in substitute command'
I want to run a simple command of replacing absolute paths to relative ones inside a CSS file like this:
sed -i 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css
It throws this
sed: 1: "/Users/sergeybasharov/W ...": bad flag in substitute command: 'b'
What can be wrong in this simple script?
Solution 1:
In your command s/\/fonts/../fonts/
is being taken as the parameter to the -i
option (the suffix to use for the backup file), and the filename argument is being treated as the editing commands.
You need to specify to disable the backup file creation:
sed -i '' ...
In your example:
sed -i '' 's/\/fonts/../fonts/' /Users/sergeybasharov/WebstormProjects/snap/compiled/Content/stylesheets/style.css
Computers are dumb, they don't figure things out by context, so they can't tell that something beginning with s/
is obviously an editing command, not a suffix.
Solution 2:
sed -i 's/\/fonts/../fonts/'
is not a valid sed command, try sed -i 's#/fonts#../fonts#'