Lan*_*nes 29 shell regular-expression
一般来说,正则表达式中的哪些字符需要转义?
例如,以下在语法上不正确:
echo '[]' | grep '[]'
grep: Unmatched [ or [^
Run Code Online (Sandbox Code Playgroud)
然而,这在语法上是正确的:
echo '[]' | grep '\[]'
[]
Run Code Online (Sandbox Code Playgroud)
是否有任何文档说明哪些字符应该在正则表达式中转义,哪些不应该?
Mat*_*teo 17
这取决于应用程序。在您的示例中,[必须将其引用为grep但不是的参数echo。
对于外壳(来自POSIX 规范):
引用用于删除某些字符或单词对 shell 的特殊含义。引用可用于保留下一段特殊字符的字面含义,防止保留字被识别为此类,并防止此处文档处理中的参数扩展和命令替换(请参阅此处文档)。
申请书如需代表本人,应引用下列文字:
Run Code Online (Sandbox Code Playgroud)| & ; < > ( ) $ ` \ " ' <space> <tab> <newline>在某些情况下可能需要引用以下内容。也就是说,这些字符可能是特殊的,具体取决于本 IEEE Std 1003.1-2001 卷中其他地方描述的条件:
Run Code Online (Sandbox Code Playgroud)* ? [ # ˜ = %各种引用机制是转义字符、单引号和双引号。here-document 代表另一种引用形式;请参阅此处文档。
特定程序(使用正则表达式、perl、awk)可能对转义有额外的要求。
pab*_*ouk 12
正则表达式有多种类型,特殊字符集取决于特定类型。其中一些描述如下。在所有情况下,特殊字符都由反斜杠转义\。例如匹配[你写\[。或者,字符(除了^)可以通过将它们一一包含在方括号中来转义,例如[[]。
在某些上下文中特殊的字符^(例如(子)表达式开头的特殊字符)可以在所有上下文中进行转义。
正如其他人所写:在 shell 中,如果您没有将表达式括在单引号之间,则必须在已经转义的正则表达式中额外转义 shell 的特殊字符。示例:'\['您可以在 Bourne 兼容的 shell 中编写\\[(或者:"\["或"\\["),例如 bash,但这是另一回事。
grep,sed.[\*^$"$(printf '%s' "$string" | sed 's/[.[\*^$]/\\&/g')"grep -E, GNU: sed -r, *BSD:sed -E.[\(*^$)+?{|"$(printf '%s' "$string" | sed 's/[.[\*^$()+?{|]/\\&/g')"每个应用程序都有自己的一组“特殊”字符。您遇到的问题grep不是外壳。对于哪些字符需要在 中引用grep,请阅读联机帮助页中关于“正则表达式”的部分。
对于 shell,应该引用的字符是:
;'"`#$&*?[]<>{}\
Run Code Online (Sandbox Code Playgroud)
和任何空格。
根据 shell,可能还需要引用其他字符:
!^%
Run Code Online (Sandbox Code Playgroud)
查看 shell 联机帮助页上的“SHELL GRAMMAR”。
| 归档时间: |
|
| 查看次数: |
54376 次 |
| 最近记录: |