如何使用grep匹配包含[]的字符串,[]中的字符由大写和小写字母以及+#组成?

时间:2019-05-11 07:25:13

标签: regex grep

字符串是这样的:

I am a [PHP] engineer, not a [Java] engineer, nor a [C++] engineer, nor a [C#] engineer.

我写了这个表达式,但是没用。

grep -n '\[([a-zA-Z+#]+)\]' filename

2 个答案:

答案 0 :(得分:2)

grep只能识别BREs,除非指定了-P-E-r标志之一。而且,这里不需要parens。

您应该使用与+等效的BRE

grep -n '\[[a-zA-Z+#]\{1,\}\]' filename

或指定-E标志以使其识别EREs(确实比前者更轻便,但更易于阅读)

grep -E -n '\[[a-zA-Z+#]+\]' filename

答案 1 :(得分:1)

是否有理由不仅仅使用它来在[...]中查找字符串?

$ grep -Eo '\[[^]]+\]' file
[PHP]
[Java]
[C++]
[C#]

上面的内容无需查找方括号内的字符,而只是查找了]以外的任何内容。