linux - Sed 错误 : bad option in substitution expression

标签 linux bash shell sed

我有一个包含以下格式数据的配置文件 (gpsd.default):

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

我正在使用 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

上面的sed 命令返回错误:

sed: bad option in substitution expression

因为新行的表达式中包含“/”。

如何更新我的 sed 命令以使其工作?

最佳答案

这是因为您正在使用包含 / 的正则表达式,它与 sed 用作分隔符的字符相同。

只需将 sed 分隔符更改为另一个分隔符,例如 ~:

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

顺便说一下,由于您正在更改 /etc 中的文件,您可能需要使用 -i.bak,以便备份原始文件。防止丢失重要信息是一种很好的做法。

关于linux - Sed 错误 : bad option in substitution expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30050923/

相关文章:

java - 在java中运行一个shell文件

linux - 如何读取 CSV 文件并将其以数组的形式存储 Bash 脚本?

linux - 为什么我们在内核模块编程中实际上使用Open和Release?这些模块的调用模式是什么?

mysql - bash shell脚本,创建mysql数据库和用户时遇到问题

mysql - 使用之前 mysql 语句中的选择

linux - 需要深入了解编写操作系统 Shell 类(class)

linux - 如何通过 ssh 连接到服务器并运行需要 bash 变量的 bash 脚本并通过 ssh 连接到另一台服务器?

linux - 施根 : pass a command to be executed as if it’s in a shell

linux - 时间戳成句子

php - 如何从命令行执行 PHP 代码?