Sed error : bad option in substitution expression

2020-02-01 08:15发布

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?

2条回答
戒情不戒烟
2楼-- · 2020-02-01 09:20

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.

查看更多
Emotional °昔
3楼-- · 2020-02-01 09:20

You should update your sed command to this.

sed -i 's/^GPS_DEVICES=\"\".*/GPS_DEVICES=\"dev\/ttyUSB1\"/' /etc/default/gpsd.default
查看更多
登录 后发表回答