【问题标题】:Using sed in a bash script to replace text in file在 bash 脚本中使用 sed 替换文件中的文本
【发布时间】:2013-04-30 05:16:16
【问题描述】:

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

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

文件中是字符串

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

我需要把它改成

account   sufficient     pam_group.so no_warn deny group=admin,wheel ruser fail_safe

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

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

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

【问题讨论】:

  • 此外,“account required pam_group.so”或“account enough pam_group.so”之间的空格可能会有所不同(可能是 TAB 或一个或多个空格字符),具体取决于我团队中的人员可能过去修改过

标签: bash file sed


【解决方案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 在第二列中。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试使用 sed 命令:

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

      【讨论】:

        猜你喜欢
        • 2020-04-24
        • 2021-09-29
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2017-11-09
        • 2013-07-21
        • 2010-11-29
        • 2014-02-09
        相关资源
        最近更新 更多