用sed用单引号替换行

replace line with single quotes by sed

我想将以 "option timezone" 开头的单行配置更改为单引号行:"option timezone 'EST-10'"。但是当我这样做时

sed -i '/option timezone/c\option timezone 'EST-10'' /etc/config/system

单引号漏掉了,结果是这样的:

head /etc/config/system 

config system
option timezone EST-10

当然,引号前的反斜杠没有帮助。我可以用 \c 命令以某种方式实现它吗? P.S。 sed 来自openwrt busybox,有限,只支持e,f,i,n,r.

试试这个:

sed -i '/option timezone/c\option timezone '\'EST-10\' /etc/config/system

相邻字符串由 bash 自动连接,因此这将关闭第一个字符串,添加一个单引号(需要转义)、EST-10,然后是另一个转义单引号。

如果 "EST-10" 部分包含空格,那么您也需要将其放入单引号中:

sed -i '/option timezone/c\option timezone '\''EST - 10'\' /etc/config/system

双引号也是一种选择,但我个人不喜欢使用它们,因为 Bash 会解释大量其他字符,例如 $! ,然后需要转义。

您可以在双引号 sed 命令中使用单引号字符串而无需转义它们:

sed -i "/option timezone/c\option timezone 'EST-10'" /etc/config/system