【问题标题】:Add text containing slashes at end of specific line in a file using sed使用 sed 在文件中特定行的末尾添加包含斜杠的文本
【发布时间】:2018-03-29 18:01:33
【问题描述】:

我想用下面的 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 脚本在mongod.service 文件的ExecStart 中添加--dbpath and --replSet 选项。

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

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

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

【问题讨论】:

  • 你自己尝试了什么?
  • 我知道在行尾添加一些文本,例如 "sed '/ExecStart/s/$/test/' mongod.service " 。不知道如何添加我上面提到的内容,因为它包含连字符、斜杠等。
  • 将其添加到问题中! @karan
  • 更新问题
  • 由于服务 $OPTIONS 已经包含配置文件 (/etc/mongod.conf) 的路径,处理更改的更正确方法是设置 storage.dbPathreplication.replSetName/etc/mongod.conf 配置文件。在升级或重新安装之间可能不会保留对 mongod.service 文件的任何手动更改;配置文件将是。

标签: linux shell sed


【解决方案1】:

您使用sed 的想法是正确的,但由于替换部分包含/,它应该被转义或者需要为sed 使用单独的分隔符。此外,双引号 sed 表达式可以让您轻松保留空格。但需要确保替换路径中没有$ 表达式。

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

也可以通过 awk 将列计数增加 1 并将其填充到最后一列中来完成

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2017-10-14
    • 2021-03-09
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多