我是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
答案 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)
快速查看你的问题,我想你应该在每个斜线前使用反斜杠来逃避斜线。
告诉我这是否奏效。
此致