Linux sed以通用方式替换单词

时间:2016-04-20 13:48:43

标签: linux sed

我想在Linux中执行sed命令取消注释“#auth”

原始文件

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid

我可以写这个命令来做到这一点:

sed 's/#auth.*sufficient.*pam_wheel.so trust use_uid/auth\t    sufficient\t  pam_wheel.so trust use_uid/' /etc/pam.d/su

但我认为这太长了。有没有更好的方法来做到这一点(更通用)? 我不想指定行号来替换它,因为如果有人更改了文件,脚本将无法正常运行。

例如:

搜索关键字“#auth。*足够。* pam_wheel.so trust use_uid ”,如果找到,请将“ #auth ”替换为“ auth “,然后在行

中附加后面的措辞

1 个答案:

答案 0 :(得分:3)

使用GNU sed,查找允许就地修改的-i选项,然后锚定正则表达式。例如:

 sed -i '/^#auth.*pam_wheel/s/^#//' INPUTFILE

将查找以"#auth"开头的行包括" pam_wheel"稍后在线并更换"#"一开始没什么。