我想将 /etc/security/limits.conf 中的以下行更改为
#* soft core 0
Run Code Online (Sandbox Code Playgroud)
到
* soft core unlimited
Run Code Online (Sandbox Code Playgroud)
启用核心转储。
我尝试使用以下 sed 命令,但它没有执行任何操作:
sed -e "s/^\#\*\([ ]+soft[ ]+core\)[0-9][0-9]*$/\*\1 unlimited/" limits.conf
Run Code Online (Sandbox Code Playgroud)
我哪里做错了?
sed有各种各样的问题:
\n\n#或 前面使用反斜杠。*它们不会造成太大伤害,但没有必要。core和 数字之间留出空格。\\(\xe2\x80\xa6\\)捕获表示法,但这意味着+没有特殊含义。-i(当您获得sed正确的命令时这很好)。您应该能够使用(GNU sed):
sed -r -e "s/^#\\*([[:space:]]+soft[[:space:]]+core)[[:space:]]+[0-9][0-9]*[[:space:]]*$/\\*\\1 unlimited/" limits.conf\nRun Code Online (Sandbox Code Playgroud)\n\n该[[:space:]]符号可识别各种空白(包括换行符等);[[:blank:]]如果您愿意,也可以使用仅识别空格和制表符的方法。
您还可以使用旧式表示法:
\n\nsed -e "s/^#\\*\\([[:space:]]\\{1,\\}soft[[:space:]]\\{1,\\}core\\)[[:space:]]\\{1,\\}[0-9][0-9]*[[:space:]]*$/*\\1 unlimited/" limits.conf\nRun Code Online (Sandbox Code Playgroud)\n\ncore如果您想保留和 数字之间的空格,您可以:
sed -e "s/^#\\*\\([[:space:]]\\{1,\\}soft[[:space:]]\\{1,\\}core[[:space:]]\\{1,\\}\\)[0-9][0-9]*[[:space:]]*$/*\\1unlimited/" limits.conf\nRun Code Online (Sandbox Code Playgroud)\n\n捕获的结束位置已移动,并且无需在替换字符串中添加空格。
\n\n请注意,当您确定脚本已准备好修改生产文件时,您应该非常小心。我通常创建一个新文件,检查它,然后将旧文件复制到带有日期/时间戳的文件名,然后将新文件复制到原始文件上。或者,使用带有 的后缀-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\nRun Code Online (Sandbox Code Playgroud)\n\n该格式(基于 ISO 8601:2004)的优点是连续的文件按日期顺序排序,无需任何特殊的排序选项。如果您愿意,您可以在日期/时间格式中添加标点符号。
\n\n无论哪种方式,如果新文件出现问题,您都会获得原始文件(的副本),您可以将其放回原处,以便系统能够尽快地再次顺利运行。
\n