Sed
為什麼我不能在 sed 中轉義大括號“]”?
問題:為什麼我不能逃脫“]”?
$ printf "*#$@~\!&*()[]\n" *#~\!&*()[] $ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g' *#~\!&*() $
在內部
[...]
,反斜杠並不特殊。[\[]
匹配反斜杠和[
1。如果要
]
在集合中包含字元,則必須確保它是第一個:[]X]
匹配]
或X
while[X]]
將匹配X
後跟]
(並且[X\]]
將匹配X
或\
後跟]
)。要排除它,它必須在^
:之後是除or[^]X]
之外的任何字元。]``X
因此,在您的範例中:
sed 's/[]*\#$@~!&*()[]//g'
1
sed
當沒有啟用 POSIX 一致性模式(通過$POSIXLY_CORRECT
或)時,GNU 有一些例外,--posix
這就是為什麼為了與該實現兼容,當您確實需要將反斜杠包含在集合中時,最好將其寫為[\\]
.