如何用sed给文件特定行末尾加含斜杠文本及修改mongod.service参数
我来逐个解答你的两个问题:
斜杠是sed默认的分隔符,直接写的话需要用\转义,不过更省心的方法是换个分隔符(比如|或#),这样不用转义斜杠,代码更直观。
举个实际例子:假设你要在test.txt的第3行末尾添加 /var/log/这个文本,有两种写法:
转义斜杠的方式:
sed '3s/$/ \/var\/log\//' test.txt这里
3指定目标行号,s是替换命令,$匹配行尾,把行尾替换成带转义斜杠的目标文本。换分隔符的方式(更推荐):
sed '3s|$| /var/log/|' test.txt把sed的分隔符换成
|后,文本里的斜杠不用转义,可读性更强。
如果要直接修改原文件(原地编辑),加上-i参数即可:
sed -i '3s|$| /var/log/|' test.txt
看你提供的mongod.service内容,现有ExecStart通过$OPTIONS加载配置,有两种靠谱的修改方式:
方式一:修改OPTIONS环境变量(更贴合原有配置逻辑)
原来的Environment行是:
Environment="OPTIONS=-f /etc/mongod.conf"
我们直接在OPTIONS后面追加目标参数,修改后变成:
Environment="OPTIONS=-f /etc/mongod.conf --dbpath /var/lib/mongo/ --replSet rs0"
用sed命令一键修改(假设service文件路径是/usr/lib/systemd/system/mongod.service,请根据实际路径调整):
sed -i 's|Environment="OPTIONS=-f /etc/mongod.conf"|Environment="OPTIONS=-f /etc/mongod.conf --dbpath /var/lib/mongo/ --replSet rs0"|' /usr/lib/systemd/system/mongod.service
方式二:直接修改ExecStart行
如果不想改动OPTIONS,也可以直接在ExecStart里插入参数:
原来的ExecStart是:
ExecStart=/usr/bin/mongod $OPTIONS
修改成:
ExecStart=/usr/bin/mongod --dbpath /var/lib/mongo/ $OPTIONS --replSet rs0
对应的sed命令:
sed -i 's|ExecStart=/usr/bin/mongod $OPTIONS|ExecStart=/usr/bin/mongod --dbpath /var/lib/mongo/ $OPTIONS --replSet rs0|' /usr/lib/systemd/system/mongod.service
最后必做步骤
修改完service文件后,需要重新加载systemd配置并重启服务:
systemctl daemon-reload systemctl restart mongod
可以用ps aux | grep mongod查看进程参数,确认--dbpath和--replSet是否已经生效。
内容的提问来源于stack exchange,提问作者Galet

