Sed用引号替换字符串

时间:2016-07-14 23:59:07

标签: linux bash sed

我是Linux和Bash的新手。

我试图用另一条线替换一条线而且我不知道如何正确使用sed:

旧行:

"certificate_path": "/etc/ajenti/ajenti.pem"

新行:

"certificate_path": "/etc/nginx/ssl/xyz-combined.pem"

我试过了:

sed -i '26s/.*//etc/nginx/ssl/xyz.de-combined.pem"/' /etc/ajenti/config.json

最好的问候, 的Aeris

4 个答案:

答案 0 :(得分:1)

SELECT MESSAGE_BODY, MESSAGE_RETWEET_COUNT FROM COOLSCHEMA.DRIL_TWEETS GROUP BY MESSAGE_BODY ORDER BY MESSAGE_RETWEET_COUNT DESC LIMIT 100; 可以使用任何字符作为替换(sed)命令的分隔符。实际上,s之后的任何内容都将被视为分隔符。

在您的情况下,您可以使用不同的分隔符,而不是转义所有斜杠。 s

#

注意: sed -i 's#"certificate_path": "/etc/ajenti/ajenti.pem"#"certificate_path": "/etc/nginx/ssl/xyz-combined.pem"#g' /etc/ajenti/config.json 选项将替换文件中所有旧模式的出现。如果要仅替换第一个图案,请将其删除。

答案 1 :(得分:0)

将sed与backreference一起使用:

sed -i 's~\("certificate_path": "/etc/\)ajenti/ajenti.pem"~\1ssl/xyz-combined.pem"~' /etc/ajenti/config.json

使用括号("certificate_path": "/etc/)捕获旧字符串和新字符串的公共部分,并使用反向引用\1添加到新路径:nginx/ssl/xyz-combined.pem"

修改

要在替换字符串中使用变量,只需用单引号括起变量名称以允许参数扩展:

mydomain="xyz-combined.pem"
sed -i 's~\("certificate_path": "/etc/\)ajenti/ajenti.pem"~\1ssl/'$mydomain'"~' /etc/ajenti/config.json

您也可以用双引号括住sed命令并转义所有内部双引号:

sed -i "s~\(\"certificate_path\": \"/etc/\)ajenti/ajenti.pem\"~\1ssl/$mydomain\"~" /etc/ajenti/config.json

答案 2 :(得分:0)

简单

sed -i 's@/etc/ajenti/ajenti.pem@/etc/nginx/ssl/xyz-combined.pem@g' \
   /etc/ajenti/config.json 

您无法准确描述是否还有其他事情需要替换。

答案 3 :(得分:-2)

快速查看你的问题,我想你应该在每个斜线前使用反斜杠来逃避斜线。

告诉我这是否奏效。

此致