Regex grep补码中的转义闭括号字符
如何在character类中转义紧括号字符?根据手册,要匹配文字]它应该放在列表的第一位,但我需要匹配由方括号组成的类的补码 大多数元字符在括号表达式中失去了特殊意义。要包含文字]请将其放在列表的第一位。类似地,要包含文字,请将其放置在除第一个以外的任何位置。最后,要包含一个文字,请将其放在最后Regex grep补码中的转义闭括号字符,regex,grep,Regex,Grep,如何在character类中转义紧括号字符?根据手册,要匹配文字]它应该放在列表的第一位,但我需要匹配由方括号组成的类的补码 大多数元字符在括号表达式中失去了特殊意义。要包含文字]请将其放在列表的第一位。类似地,要包含文字,请将其放置在除第一个以外的任何位置。最后,要包含一个文字,请将其放在最后 这取决于实施情况 在grep-P模式中,您实际上可以使用[][]来匹配作为开始括号或结束括号的字符 一般来说,最可移植的语法是转义:[\]和[\] 相关的 不幸的是,zx81的解决方案不起作用。特别
这取决于实施情况
- 在
模式中,您实际上可以使用grep-P
来匹配作为开始括号或结束括号的字符[][]
- 一般来说,最可移植的语法是转义:
和[\]
[\]
不幸的是,zx81的解决方案不起作用。特别是对于输入: [2014年6月22日04:11:37 UTC] 失败了 起作用的是根本没有脱离封闭支架:
grep '^[[][^]]*]'
grep似乎仍然认为右括号是第一个字符,即使它前面有插入符号。如何在字符类中转义右括号字符?
]
通常是字符的结尾,或者表示字符类的结尾
如果]
是类中的第一个字符(可能跟在未转义插入符号之后),则它并不表示类的结束,而是作为可以匹配而不转义的字符集的一部分进行计算
echo "foo [22-Jun-2014 04:11:37 UTC] bar" | grep -o '\[[^]]*\]'
# [22-Jun-2014 04:11:37 UTC]
为什么这样做有效
方括号被视为字符串,没有任何显式转义字符,它们不是
grep
正则表达式特殊文本的一部分。你的意思是[\]]
?一个例子会更好。这是一个神秘的知识,应该是grep-o.[^][*.
,即把]
放在第一位。
echo "foo [22-Jun-2014 04:11:37 UTC] bar" | grep -o '\[[^]]*\]'
# [22-Jun-2014 04:11:37 UTC]
user$ sleep 400 &
[1] 13242
user$ sleep 500 &
[2] 13253
user$ jobs
[1]- Running sleep 400 &
[2]+ Running sleep 500 &
user$ jobs | grep "sleep 400" | grep -o ^"["[0-9][0-9]*"]"
[1]
user$ jobs | grep "sleep 500" | grep -o ^"["[0-9][0-9]*"]"
[2]