使用sed在文件中的特定行末尾添加包含斜杠的文本

时间:2018-03-29 09:39:02

标签: linux shell sed

我想用dbpath选项启动mongod,如下所示

mongod --dbpath /var/lib/mongo/ --config /etc/mongod.conf --replSet rs0

这是mongod.service: -

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb

如何使用shell脚本在--dbpath and --replSet ExecStart文件中添加mongod.service选项。

我希望我的输出如下所示: -

mongod.service: -

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS --dbpath /var/lib/mongo/ --config /etc/mongod.conf --replSet rs0
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb

我知道使用以下命令在行尾添加一些文本:

sed '/ExecStart/s/$/ test/' mongod.service

不知道如何添加我上面提到的内容,因为它包含连字符,斜杠等。

1 个答案:

答案 0 :(得分:1)

您使用sed的想法是正确的,但由于替换部分包含/,因此应对其进行转义,或者需要将单独的分隔符用于sed。同时双引号sed表达式可以让您轻松保留空格。但需要确保替换路径中没有$个表达式。

sed "/^ExecStart=/s/$/ --dbpath \/var\/lib\/mongo\/ --config \/etc\/mongod.conf --replSet rs0/" file

也可以通过将列数递增1并将其填入最后一列来awk完成

awk -F= '$1=="ExecStart"{NF++; $NF="--dbpath /var/lib/mongo/ --config /etc/mongod.conf --replSet rs0"}1' file