输入为#PermitRootLogin no. 为什么下面的sed表达式不能用于sed?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogins+.*/PermitRootLogin yes/'
但在我删除关键字后的+它工作吗?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogins.*/PermitRootLogin yes/'
我以为+after as表示一个或多个先前的标记。
sed要点
PS: regex101.com
您必须转义+
符号:
在GNU sed中,这些字符?
,+
,括号,大括号({})
和|
没有特殊的含义,除非加上反斜杠作为前缀。
加号+
在您的情况下意味着匹配字面量+
,所以它将匹配#PermitRootLogin +no
中的加号。您必须在s+
中转义它才能匹配一个或多个空白字符#PermitRootLogin no
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogins+.*/PermitRootLogin yes/'
输出:
PermitRootLogin yes