Sed

為什麼我不能在 sed 中轉義大括號“]”?

  • May 15, 2015

問題:為什麼我不能逃脫“]”?

$ printf "*#$@~\!&*()[]\n"
*#~\!&*()[]
$ printf "*#$@~\!&*()[]\n" | sed 's/[*#$@~!&*()\[\]]//g'
*#~\!&*()
$

在內部[...],反斜杠並不特殊。[\[]匹配反斜杠和[1。

如果要]在集合中包含字元,則必須確保它是第一個:[]X]匹配]Xwhile[X]]將匹配X後跟](並且[X\]]將匹配X\後跟])。要排除它,它必須在^:之後是除or[^]X]之外的任何字元。]``X

因此,在您的範例中:

sed 's/[]*\#$@~!&*()[]//g'

1sed當沒有啟用 POSIX 一致性模式(通過$POSIXLY_CORRECT或)時,GNU 有一些例外,--posix這就是為什麼為了與該實現兼容,當您確實需要將反斜杠包含在集合中時,最好將其寫為[\\].

引用自:https://unix.stackexchange.com/questions/203572