在bash脚本中使用sed替换文件中的文本

时间:2013-05-06 12:38:04

标签: bash file sed

在Mac OS X上,管理员可以通过修改位于以下位置的文件来解锁其他管理员的屏幕保护程序: /etc/pam.d/screensaver

我需要一个简单的命令来更改此文件(我的脚本正在执行许多其他操作,我已经在运行bash脚本作为sudo)。这可能已经改变了,所以我需要测试字符串并在发现时进行更改。

在文件中是字符串

  

帐户必需 pam_group.so no_warn deny group = admin,wheel ruser fail_safe

我需要将其更改为

  

帐户足够 pam_group.so no_warn deny group = admin,wheel ruser fail_safe

理想情况下,我想报告是否有必要进行更改,或者在脚本运行之前已经进行了更改。

我也可以只注释掉或删除该行,我更愿意将其更改为详细信息。 这个TN详述了我正在尝试的内容

http://support.apple.com/kb/HT5145?viewlocale=en_US

3 个答案:

答案 0 :(得分:1)

$ cat foo
foo bar
account    required       pam_group.so no_warn deny group=admin,wheel ruser fail_safe
account    required       am_group.so no_warn deny group=admin,wheel ruser fail_safe
accoi    required       pam_group.so no_warn deny group=admin,wheel ruser fail_
foo bar

$ awk '$1~/^account$/ && $3~/^pam_group.so/ && $2~/^required$/ { $2 = "sufficient" }1' foo
foo bar
account sufficient pam_group.so no_warn deny group=admin,wheel ruser fail_safe
account    required       am_group.so no_warn deny group=admin,wheel ruser fail_safe
accoi    required       pam_group.so no_warn deny group=admin,wheel ruser fail_
foo bar

如果第一列($1)为account且第二列($2)为required且第三列($3)以字符串pam_group.so,在第二列中将required替换为sufficient

答案 1 :(得分:0)

对于awk解决方案

awk ' { if($2 == "required") {sub("required","sufficient");} print }' filename

答案 2 :(得分:-1)

尝试使用sed命令:

sed -i 's/old-word/new-word/g' <filename>