在sed中的特殊字符

7

有人知道在 sed 中所有特殊字符的完整列表吗?

请不要给出这样的答案:它与 grep 中的特殊字符列表相同,因为那只是把我的问题转化成:有人知道在 grep 中所有特殊字符的完整列表吗?


sed(和grep)的文档是您要寻找的内容。您在其中没有找到什么? - Mat
我只看到了特殊字符的示例,但我从来不确定它是否是特殊字符的_完整_列表。 - mnr
2
我甚至不确定你所说的“特殊字符”是什么意思,但文档中列出了你可以做的一切。在这里复制那份文档是没有意义的。 - Mat
2个回答

5
这要看情况。严格来说,符合标准的sed只能使用基本正则表达式, 标准中规定了以下内容:
BRE特殊字符及其特殊含义的上下文如下: .[\ 句点、左方括号和反斜杠在除了用于表示一个括号表达式(参见RE Bracket Expression)时都是特殊字符。一个包含未被反斜杠转义的左方括号并且不属于括号表达式的表达式会产生未定义的结果。 * 星号在除了用于表示一个括号表达式、作为整个BRE的第一个字符(如果有初始的'^'),或者作为子表达式的第一个字符(如果有初始的'^')时都是特殊字符;参见BREs Matching Multiple Characters。 ^ 插入符号在作为锚点(参见BRE Expression Anchoring)或者作为一个括号表达式的第一个字符(参见RE Bracket Expression)时都是特殊字符。 $ 美元符号在作为锚点时是特殊字符。
所以完整的列表是.[\*^$,但上下文很重要。此外,许多sed提供使用扩展正则表达式(EREs)的选项,这将扩展列表并更改字符被视为特殊字符的上下文。例如,在没有EREs的情况下,使用\(\)进行分组,但是在有EREs的情况下,()本身就是特殊字符,必须转义才能与其字面匹配。

3

我认为这是sed会以不同于普通字符的方式响应的特殊字符[\^$.|?*+()]的完整列表。


2
也取决于方言。在Linux的sed中,字符()|+?本身并不特殊,只有在前面加上反斜杠才是特殊符号。 - tripleee
1
同样,在字符类 ^-] 中(但没有其他字符类),也有特殊的含义。实际上,它是一个独立的小语言。 - tripleee
1
POSIX 的字符类中,您还可以编写区域设置敏感的表达式,例如 [[:alpha:]][[:punct:][:digit:]],因此 : 也具有特殊含义 - 这是另一种迷你语言。该网址列出了 POSIX 标准 BRE(基本正则表达式)和 ERE(扩展正则表达式)的行为。sed 的 POSIX 描述对此进行了详细说明。对于任何特定系统,请查看本地手册页。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接