sed或awk更改RHEL7上文件中的特定编号



我需要帮助弄清楚语法或使用什么命令来查找文件中特定数字的替换。我需要在配置文件中将数字10替换为25。我尝试过以下几种:

sed 's/10/25/g' /etc/security/limits.conf

这会将包含10的其他实例(如1000和10000)更改为2500和25000,我需要将10更改为25。请帮忙。

谢谢你,

Joseph

这里的技巧是将sed替换限制为要更改的行。对于limits.conf,您最好匹配域、类型和项目。因此,如果你只想更改域@student的限制,键入hard,项目nproc,你可以使用类似的东西

sed '/@student.*hard.*nproc/s/10/25/g' /etc/security/limits.conf
sed -ri '/^#/!s/(^.*)([[:space:]]10$)/1 25/' /etc/security/limits.conf

启用正则表达式解释(-r或-E)后,使用处理所有不以#开头的行!然后,我们将行拆分为两个部分,并将第一个部分的行替换为空格和25。$确保要替换的条目锚定在行的末尾。

Awk是另一种选择:

awk -i 'NF==4 && $4==10 { gsub("10","25",$4) }1' /etc/security/limits.conf

检查该行是否有4个空格分隔的字段(NF==4),第4个字段($4)是否为10。如果满足此条件,则使用gsub将10替换为25,并使用1 打印所有行

-i是awk最近版本的一个就地修正标志。如果没有兼容版本,请使用:

awk 'NF==4 && $4==10 { gsub("10","25",$4) }1' /etc/security/limits.conf > /etc/security/limits.tmp && mv -f /etc/security/limits.tmp /etc/security/limits.conf

使用这个Perl单行,其中b代表单词break(因此10将不匹配210或102):

perl -pe 's/b10b/25/g' in_file > out_file

或者就地更改文件:

perl -i.bak -pe 's/b10b/25/g' in_file

Perl单行使用以下命令行标志:
-e:neneneba告诉Perl在线查找代码,而不是在文件中查找代码
-p:一次循环输入一行,默认情况下将其分配给$_。在每次循环迭代后添加print $_
-i.bak:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过在原始文件的名称后附加扩展名.bak来保存原始文件的备份副本。

正则表达式使用修饰符/g:重复匹配模式。

另请参阅:
perldoc perlrun:如何执行Perl解释器:命令行开关
perldoc perlrequick:Perl正则表达式快速启动

相关内容

  • 没有找到相关文章

最新更新