regex - 在字符序列上使用 grep 案例场景
问题描述
试图在目录上#hīc"
使用 grep 表达式捕获字符串grep -r -i '#\w[ēāīōū]*\w+\"' *.html
。我在regex101 站点上测试了正则表达式字符串,它在那里工作。Grep 3.4 对比
解决方案
您遇到的问题是+
. POSIX grep 中的 BRE 没有+
1 或更多,这将被解释为'+'
grep 正在寻找的文字。
POSIX grep也不\w
支持速记字符类(尽管它不被禁止,并且某些平台,例如 BSD 和 OS X 确实\w
支持。)
标准 POSIX 字符类将[:alnum:]
具有一些支持[:word:]
或[:name:]
,取决于您的本地设置和 grep,相当于\w
. 可以在此处和此处查看其他课程。这些字符类也存在差异,例如是否_
包含在类中以及是否包含非 ascii 字母。
对于相同的匹配(确保 1 或更多而不是 0 或更多*
单独)使用\w\w*
而不是\w+
(或者[[:alnum:]][[:alnum:]]*
如果您的 grep 不支持\w
)
这适用于 BSD/Mac grep:
echo 'line 1
line 2
#hīc"
line 4' | grep '#\w[ēāīōū]*\w\w*"'
#hīc"
或者使用 GNU grep 中的 PCRE 引擎来实现 PCRE 兼容的正则表达式。这就是 regex101 中使用的内容。
echo 'line 1
line 2
#hīc"
line 4' | ggrep -P '#\w[ēāīōū]*\w+"'
#hīc"
但这-P
仅在 GNU grep 中;不在 POSIX 中。
推荐阅读
- java - 在java中将列表划分为固定数量的列表
- python - 如何在 python 中从 lambda 连接到 AWS RDS 代理?
- django - Django - 仅出于过滤目的修改字段值
- sql - 在 Postgres 中获取时差时出错
- python-3.x - 在 Pandas 数据框中插入一行会将 NaN 转换为 NaT
- javascript - 为什么“chrome.tabs.onUpdated.addListener()”回调中的tab.url返回未定义?
- kubernetes - 在 Kubernetes 中启动 Pod 时如何运行命令?
- sql - 在 Excel VBA 中定义一个运行 SQL 查询的函数(从函数列和行中选择给定的)
- optimization - 如果容量也得到优化并且存在最小功率,如何在 MILP 中实现关断、启动、斜升和斜降
- python - 如何使 OpenCV 图像变亮