regex - 无法使用 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 ]
类似的信息。
解决方案
Perl 兼容的正则表达式...
grep -P "\[[A-Z\s]*\]"
...为我工作。输入:
[INFO]
[WARN ]
[TEST2]
输出:
[INFO]
[WARN ]
如果您的系统上没有可用的 PCRE,
grep "\[[A-Z[:space:]]*\]"
将使用 grep 的内置基本语法。
推荐阅读
- python - 瞻博网络防火墙配置文件到字典
- javascript - Vue路由器 - 验证参数是否在数组中
- database - 如何删除 RANGE 分区?
- html - 使用图片标签加载图像
- microsoft-graph-api - 控制应用程序对 SharePoint 网站的 API 访问
- angular - 我如何添加一个从有角度的材料形式中获取价值的项目?
- laravel - 为什么 laravel 在这段代码中集体打印'
- swift - 在 swift 中使用 OCR 扫描发票
- html - 间距不会产生边距
- python - 张量流中的 output_data[output_ids == i] = input_data[input_ids == i]