【问题标题】:Use sed to change an entry of a configuration file使用 sed 更改配置文件的条目
【发布时间】:2015-03-17 15:24:58
【问题描述】:

我想更改 /etc/security/limits.conf 中的以下行

#*               soft    core           0

*               soft    core            unlimited

启用核心转储。

我尝试使用以下 sed 命令,但它什么也没做:

sed -e "s/^\#\*\([ ]+soft[ ]+core\)[0-9][0-9]*$/\*\1 unlimited/" limits.conf

我哪里做错了?

【问题讨论】:

标签: sed


【解决方案1】:

sed 的机制

有各种各样的问题:

  1. 在替换文本中#* 前面不需要反斜杠。它们不会造成太大伤害,但也不是必需的。
  2. 您需要在core 和数字之间留出空格。
  3. 文件中不允许有空格和制表符。
  4. 您不允许在行尾添加空格(这可能无关紧要)。
  5. 您没有显式启用扩展正则表达式,并且确实使用了旧式 \(…\) 捕获表示法,但这意味着 + 没有特殊含义。
  6. 您没有使用 -i 选项修改文件(这很好,当您得到正确的 sed 命令时)。

你应该可以使用(GNU sed):

sed -r -e "s/^#\*([[:space:]]+soft[[:space:]]+core)[[:space:]]+[0-9][0-9]*[[:space:]]*$/\*\1 unlimited/" limits.conf

[[:space:]] 表示法可以识别各种空格(包括换行符等);你也可以使用[[:blank:]],如果你愿意,它只识别空格和制表符。

您也可以使用旧式表示法:

sed -e "s/^#\*\([[:space:]]\{1,\}soft[[:space:]]\{1,\}core\)[[:space:]]\{1,\}[0-9][0-9]*[[:space:]]*$/*\1 unlimited/" limits.conf

如果你想保留core和数字之间的空白,你可以:

sed -e "s/^#\*\([[:space:]]\{1,\}soft[[:space:]]\{1,\}core[[:space:]]\{1,\}\)[0-9][0-9]*[[:space:]]*$/*\1unlimited/" limits.conf

捕获的关闭被移动,并且不需要在替换字符串中添加空格。

修改系统文件需谨慎

请注意,当您确定您的脚本已准备好修改生产文件时,您应该非常小心。我通常创建一个新文件,检查它,然后将旧文件复制到带有日期/时间戳的文件名,然后将新文件复制到原始文件上。或者,使用带有-i 的后缀,可能又带有日期/时间。

sed -i .$(date +'%Y%m%d.%H%M%S') -e "s/^#\*\([[:space:]]\{1,\}soft[[:space:]]\{1,\}core[[:space:]]\{1,\}\)[0-9][0-9]*[[:space:]]*$/*\1unlimited/" limits.conf

这种格式(基于 ISO 8601:2004)的优点是连续文件按日期顺序排序,无需任何特殊排序选项。如果您愿意,可以在日期/时间格式中添加标点符号。

无论哪种方式,如果新文件出现问题,您将获得(一份)原件,您可以将其放回原件,以便系统在合理可行的情况下以最快的速度再次平稳运行。

【讨论】:

  • +1,但您可能想提及请求的不明智性质。这种对安全相关文件的更改可能不应该以这种方式进行。
  • @WilliamPursell:是的,我想知道这一点。我确实在第 6 条中部分提到了它,但争论是否要扩展它。我补充一下。
  • 非常感谢乔纳森提供的信息。我将 core 之后的模式更改为 [0-z][-z] 以处理原始值是非数字的情况,例如它也是“无限”的,但只是被注释掉了。
【解决方案2】:

这个awk 应该这样做:

awk '/^#.*soft.*core/ {sub(/^#/,"");sub(/0$/,"unlimited")}1' file
*               soft    core           unlimited

【讨论】:

  • 在其他有评论但与soft ... core主题无关的行上小心
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 2021-04-24
  • 2011-08-22
  • 2011-04-11
  • 2018-02-09
相关资源
最近更新 更多