gpt4 book ai didi

linux - 如何在 Linux Bash 脚本文件中使用 'sed' 来注释掉带有制表符间距的特定行?

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:07 25 4
gpt4 key购买 nike

我希望使用 sed 在特定文件中的这一行的开头添加“#”。该脚本将在 .sh 文件中运行,而不是在控制台中输入。

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

应该是:

#auth    [success=1 default=ignore]      pam_unix.so nullok_secure

我目前正在尝试类似于以下的命令:

sudo sed -e '/auth[[:tab:]][success=1[[:space:]]default=ignore][[:tab:]]pam_unix.so[[:space:]]nullok_secure/ s/^#*/#/' -i /etc/pam.d/common-auth

我知道上面的命令是错误的,因为 [[:tab:]] 不是一个有效的命令。我只想显示制表符出现的位置。

感谢任何帮助!!!谢谢!!!

最佳答案

在 Ubuntu 上,您可以使用 \t 作为制表符,我相信这甚至在 POSIX 中也有规定。

/auth\t\[success=1 default=ignore\]\tpam_unix.so nullok_secure/

我想我在 BSD 上做这件事时遇到了问题,但如果你真的不在乎它是一个制表符,并且即使它有其他类型的空格也会接受该行,你可以多一点灵活

/auth[[:space:]]\+\[success=1 default=ignore\]pam_unix.so[[:space:]]nullok_secure/

这是 GNU 主义,\+ 表示前面的一个或多个,要更 POSIX-y,你可以这样做

/auth[[:space:]][[:space:]]*\[success=1 default=ignore\]pam_unix.so[[:space:]]nullok_secure/

(注意 [:space:] 字符类不仅仅包含空格字符,它是一组空白字符,其中包括制表符。)

另请注意,我们必须在您匹配的模式中转义 [ ,否则它将定义要匹配的事物的字符类,这肯定不是您在这里尝试的.

作为另一种选择,假设您的 common-auth 看起来像我的,这是唯一具有 success=1 的行,因此您可以直接使用它,尽管它是如果其他人有时对文件进行更改,则更脆弱。

关于linux - 如何在 Linux Bash 脚本文件中使用 'sed' 来注释掉带有制表符间距的特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com