用sed替换单引号行

时间:2015-02-17 14:01:04

标签: regex bash 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命令以某种方式实现它。 附: sed来自openwrt busybox,有限,只支持e,f,i,n,r。

2 个答案:

答案 0 :(得分:3)

试试这个:

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会解释其他一些字符,例如$!,然后需要转义。

答案 1 :(得分:1)

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

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