2012-09-16 257 views
6

有沒有人知道sed中特殊字符的完整列表是什麼?sed中的特殊字符

請不要給出類似於grep的特殊字符列表,因爲這只是將我的問題轉換爲:有人知道grep中特殊字符的完整列表是什麼嗎?

+0

sed(和grep)的文檔就是你要找的。那裏沒有找到什麼? – Mat

+0

我剛剛看到什麼是特殊字符的例子,但我不確定它是否是特殊字符的_complete_列表 – mnr

+2

我甚至不確定您的意思是「特殊字符」,但文檔列出了您可以執行的所有操作。這裏複製該文檔沒有意義。 – Mat

回答

3

我認爲這是sed將以不同於普通字符的方式響應的字符的完整列表[\^$。|?* +()。

+2

也取決於方言。在Linux'sed'中,字符'()| +?'本身並不是特殊的,只有在前面加了一個反斜槓。 – tripleee

+1

也在一個字符類'^ - ]'(但沒有其他人)是特殊的。這是一個單獨的迷你語言,真的。 – tripleee

+1

在[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html)下的字符類中,還可以編寫區域敏感表達式,例如'[[:alpha:]]'或'[[:punct:] [:digit:]]',所以':'也有特殊含義 - 它是(又一個)迷你語言。該URL列出了POSIX標準BRE(基本正則表達式)和ERE(擴展正則表達式)的行爲。 ['sed']的POSIX描述(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html)詳細說明了這一點。對於任何特定系統,請查看本地手冊頁。 –

5

這取決於。嚴格地說,sed的符合標準的必須只使用基本的正則表達式爲其中 the standard狀態:

的BRE的特殊字符,以及他們有其特殊的意義上下文如下:

.[\期間,左方括號和反斜槓應該是特殊的,除非在括號表達式中使用(請參閱「括號表達式」)。包含'['的表達式不包含反斜槓並且不是括號表達式的一部分,這會產生未定義的結果。

*除非在括號表達式中使用,否則作爲整個BRE的第一個字符(在初始'^'之後(如果有的話))或作爲子表達式的第一個字符(在初始值之後'^',如果有的話);見BREs裏面匹配多個字符

^抑揚應作爲錨一起使用時是特(見BRE表達錨定) 或作爲括號表達式的第一個字符(見RE括號表達式)

$的數亦當用作錨點時,標誌應該是特殊的。

所以完整的列表是.[\*^$,但上下文很重要。此外,許多sed提供了使用擴展正則表達式(ERE)的選項,這將擴展列表並更改字符特殊的上下文。例如,在沒有ERE的情況下,使用\(\)形成分組,但EREs ()本身是特殊的,必須從字面上進行匹配才能逃脫。