繁体   English   中英

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

[英]Using sed in a bash script to replace text in file

在Mac OS X上,管理员可以通过修改/etc/pam.d/screensaver的文件来解锁另一位管理员的屏幕保护程序。

我需要一个简单的命令来更改此文件(我的脚本正在执行许多其他操作,并且我已经以sudo的身份运行bash脚本)。 这可能已经被更改,所以我需要测试字符串并在找到后进行更改。

在文件中是字符串

需要帐户pam_group.so no_warn deny group = admin,轮ruser fail_safe

我需要将其更改为

帐户足够 pam_group.so no_warn拒绝group = admin,轮ruser fail_safe

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

我也可以只注释掉或删除该行,我希望对其进行详细的更改。 此TN详细说明了我要尝试的内容

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

$ 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 ,顶替requiredsufficient在第二列中。

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

尝试使用sed命令:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM