在我的一些机器上,我在 sysctl.conf 中有这个设置块(每台机器上的数字不同):
#Size Of RAM (In GB): 23
kernel.shmmni= 2547
kernel.shmmax= 365482458
kernel.shmall= 25471984
#kernel.sem=<SEMMSL> <SEMMNS> <SEMOPM> <SEMMNI>
kernel.sem= 325 12496852 74 3654
kernel.msgmni= 1204
kernel.msgmax= 57452
kernel.msgmnb= 74235
该块的位置有时会有所不同。我想编写一个 bash 来删除这些旧设置并插入新配置。因为它是 sysctl.conf 我需要安全地完成它。我如何用sed
or删除它们grep
并确保只有这个块会删除?
答案1
如果这是文件中唯一出现这些行的位置:
sed '/#Size Of RAM (In GB): 23/,/kernel.msgmnb/d' /etc/sysctl.conf
它会搜索该块之间的所有内容(包括该块的第一行和最后一行)并将其删除。我完整地包含了第一行,而不是较小的字符串,以防万一Size
或其中的其他内容出现在文件的其他位置。kernel.msgmnb
正如您所说,我也使用过,该数字在其他机器上是不同的。
该命令会将更改发送到标准输出,以便您可以确保更改是您想要的。如果是,您可以通过添加开关来对文件进行就地编辑-i
:
sed -i '/#Size Of RAM (In GB): 23/,/kernel.msgmnb/d' /etc/sysctl.conf