輸入是#PermitRootLogin no。為什么以下 sed 運算式不適用于 sed?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s .*/PermitRootLogin yes/'
但是在我洗掉關鍵字之后的 之后它會起作用嗎?
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s.*/PermitRootLogin yes/'
我認為\s之后的 表示一個或多個先前的標記。
要點
PS:無論哪種方式都適用于 regex101.com
uj5u.com熱心網友回復:
你必須逃避這個 標志:
在 GNU sed 中,使用基本的正則運算式語法這些字符 '?'、' '、括號、大括號 ('{}') 和 '|' 除非以反斜杠 ('\') 為前綴,否則沒有特殊含義。
您的情況下的加號 表示匹配文字 ,因此它會匹配中的加號#PermitRootLogin no。您必須將其轉義\s\ 才能匹配一個或多個空格字符#PermitRootLogin no
echo "#PermitRootLogin no" | sed 's/^#PermitRootLogin\s\ .*/PermitRootLogin yes/'
輸出:
PermitRootLogin yes
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532822.html
標籤:正则表达式重击sed
