首页 > 解决方案 > 无法使用 grep 匹配字符组

问题描述

我想匹配正则表达式\[[A-Z\s]*\]。似乎 grep 无法解释[A-Z\s]any upper-case letter or space. \[.*\]有效,但对我来说不够具体。

快速浏览会grep --help发现正则表达式有多种选择。

  -E, --extended-regexp     PATTERN is an extended regular expression (ERE)
  -F, --fixed-strings       PATTERN is a set of newline-separated strings
  -G, --basic-regexp        PATTERN is a basic regular expression (BRE)
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -e, --regexp=PATTERN      use PATTERN for matching

我似乎无法让它与这些选项中的任何一个一起使用。我究竟做错了什么?

背景:我想浏览日志信息。记录器有时会输出具有[INFO][WARN ]类似的信息。

标签: regexgrep

解决方案


Perl 兼容的正则表达式...

grep -P "\[[A-Z\s]*\]"

...为我工作。输入:

[INFO]
[WARN ]
[TEST2]

输出:

[INFO]
[WARN ]

如果您的系统上没有可用的 PCRE,

grep "\[[A-Z[:space:]]*\]"

将使用 grep 的内置基本语法。


推荐阅读