Sed error : bad option in substitution expression

2020-02-01 09:07发布

问题:

I have a configuration file (gpsd.default) containing data with the following format:

# If you must specify a non-NMEA driver, uncomment and modify the next line     
GPSD_SOCKET="/var/run/gpsd.sock"                                                
GPSD_OPTIONS=""                                                                
GPS_DEVICES="" 

I am making a change on the file with sed:

sed -i 's/^GPS_DEVICES="".*/GPS_DEVICES="dev/ttyUSB1"/' /etc/default/gpsd.default
or 
sed -i '4s/^.*/GPS_DEVICES="dev/ttyUSB1"/' /etc/default/gpsd.default

The above sed command returns error:

sed: bad option in substitution expression

Because the new line contains "/" in its expression.

How to update my sed command to make it work?

回答1:

This is because you are using a regex containing /, which is the same character sed uses as delimiter.

Just change the sed delimiter to another one, for example ~:

sed -i 's~^GPS_DEVICES="".*~GPS_DEVICES="dev/ttyUSB1"~' /etc/default/gpsd.default

By the way, since you are changing files in /etc, you may want to use -i.bak, so that the original file gets backed up. It is a good practice to prevent loss of important information.



回答2:

You should update your sed command to this.

sed -i 's/^GPS_DEVICES=\"\".*/GPS_DEVICES=\"dev\/ttyUSB1\"/' /etc/default/gpsd.default