输入是#PermitRootLogin 否。为什么以下 sed 表达式不能与 sed 一起使用?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/'
但是当我删除关键字后面的 + 后它会起作用吗?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s.*/PermitRootLogin yes/'
我以为+之后\s表示一个或多个前一个标记。
sed gist
PS:无论哪种方式都可以与 regex101.com 一起使用
你必须逃离+
sign:
在 GNU sed 中,使用基本的正则表达式语法这些字符?
, +
、 括号、 大括号({})
, and |
除非以反斜杠为前缀,否则没有特殊含义\
.
加号+
在你的情况下意味着匹配文字+
,所以它会匹配中的加号#PermitRootLogin +no
。你必须逃避它\s\+
能够匹配一个或多个空白字符#PermitRootLogin no
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s\+.*/PermitRootLogin yes/'
Output:
PermitRootLogin yes
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)