gpt4 book ai didi

regex - 用于多个搜索的 sed 正则表达式语法

转载 作者:行者123 更新时间:2023-12-05 01:24:09 25 4
gpt4 key购买 nike

我正在尝试查找并替换/etc/ssh/sshd_config 中的特定字符串。
#PermitRootLogin 是 > PermitRootLogin 否。但是,我想确保我得到它的几乎任何版本(如果有意义的话)。

例如;

#PermitRootLogin yes
PermitRootLogin yes
#PermitRootLogin no

我对 bash、linux、unix 等还很陌生,过去 2 周才开始学习这些东西,所以如果可能的话,请向我解释,就像我是 linux/unix 的新手一样。提前谢谢你。

到目前为止,我已经尝试了 2 件事,但它们似乎都没有满足我的需要。

sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME

sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME

我希望上面示例中的所有行都更改为;

PermitRootLogin no
PermitRootLogin no
PermitRootLogin no

最佳答案

这个只是少了一个空格

sed -E 's/(#|^)PermitRootLogin(yes|no)/PermitRootLogin no/' FILENAME 
# ............................^

我会建议

sed -E '/PermitRootLogin/ s/.*/PermitRootLogin no/' FILENAME

这意味着:对于包含字符串“PermitRootLogin”的任何行,将整行替换为“PermitRootLogin no”


这个

sed -E 's/(#/|^/)PermitRootlogin(yes/|no/)/PermitRootLogin no/' FILENAME

显示出对 sed 中 / 字符作用的一些误解。

/ 不是正则表达式字符,它是 s 命令的分隔符,用于分隔正则表达式、替换文本和标志。参见 3.3 The s Command在 sed 手册中。

关于regex - 用于多个搜索的 sed 正则表达式语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71588285/

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