Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sed error : bad option in substitution expression

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?

like image 362
ogs Avatar asked May 05 '15 10:05

ogs


2 Answers

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.

like image 127
fedorqui 'SO stop harming' Avatar answered Oct 16 '22 18:10

fedorqui 'SO stop harming'


You should update your sed command to this.

sed -i 's/^GPS_DEVICES=\"\".*/GPS_DEVICES=\"dev\/ttyUSB1\"/' /etc/default/gpsd.default
like image 4
Harshad Yeola Avatar answered Oct 16 '22 16:10

Harshad Yeola