在bash脚本中使用sed替换文件中的文本
在Mac OS X上,管理员可以通过修改位于以下位置的文件来解锁其他管理员的屏幕保护程序:在bash脚本中使用sed替换文件中的文本,bash,file,sed,Bash,File,Sed,在Mac OS X上,管理员可以通过修改位于以下位置的文件来解锁其他管理员的屏幕保护程序: /etc/pam.d/screensaver 我需要一个简单的命令来更改这个文件(我的脚本正在执行许多其他操作,并且我已经以sudo的身份运行bash脚本)。这可能已经被更改了,所以我需要测试字符串,如果找到,则进行更改 文件中有字符串 帐户必需pam_组。因此,无警告拒绝组=管理员,车轮安全 我需要把这个换成 帐户足够pam\u组。因此无警告拒绝组=管理员,车轮ruser故障\u安全 理想情况下,我希望
/etc/pam.d/screensaver
我需要一个简单的命令来更改这个文件(我的脚本正在执行许多其他操作,并且我已经以sudo的身份运行bash脚本)。这可能已经被更改了,所以我需要测试字符串,如果找到,则进行更改
文件中有字符串
帐户必需pam_组。因此,无警告拒绝组=管理员,车轮安全
我需要把这个换成
帐户足够pam\u组。因此无警告拒绝组=管理员,车轮ruser故障\u安全
理想情况下,我希望报告更改是必要的,还是在脚本运行之前已经进行了更改
我也可以仅仅注释掉或删除这行,我更愿意详细地修改它。
这个TN详细说明了我在尝试什么
尝试使用sed命令:
sed -i 's/old-word/new-word/g' <filename>
sed-i's/old word/new word/g'
如果第一列(
$1
)是账户
,第二列($2
)是必需的
),第三列($3
)以字符串pam_组开始。因此
,将第二列中的必需的
替换为足够的
。awk'{If($2=“必需的”){sub(“必需”、“足够”);}print}文件名
对于awk解决方案此外,“account required pam_group.so”或“account required pam_group.so”之间的空白可能会有所不同(可能是一个制表符或一个或多个空格字符),具体取决于我的团队成员过去可能对其进行过修改
$ 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