Debian12下sed无法注释含星号的行问题求助
问题
尝试通过sed命令注释一行SSH配置内容,执行的命令如下:
sudo sed -i "s|Include /etc/ssh/sshd_config.d/*.conf|#Include /etc/ssh/sshd_config.d/*.conf|" /etc/ssh/sshd_config
但命令未生效,无报错信息,目标行却未被注释。操作环境为Debian 12,请问问题出在哪里?
原因与解决方法
核心问题:正则特殊字符未转义
sed使用正则表达式处理匹配,其中*和.是具有特殊含义的元字符:*:作为量词,匹配前面的字符0次或多次,不是字面意义的通配符.:匹配任意单个字符,不是字面意义的点号
原命令里直接写*.conf,sed会把它解析成正则规则,无法匹配配置文件里的字面量*.conf,导致替换失败。
正确命令
转义特殊字符,同时用#&简化替换逻辑(&代表匹配到的整个内容):sudo sed -i "s|Include /etc/ssh/sshd_config.d/\*\.conf|#&|" /etc/ssh/sshd_config如果确认配置行里的点号没有拼写差异,也可以只转义
*:sudo sed -i "s|Include /etc/ssh/sshd_config.d/\*.conf|#&|" /etc/ssh/sshd_config
内容的提问来源于stack exchange,提问作者Sig
相关产品推荐
相关产品推荐

