regex - 如何在 grep [] 语法中禁用 ^ 字符的特殊含义?
问题描述
假设,我有一个如下文件:
aaa1bbb
aaa^bbb
aaa\bbb
aaa%bbb
aaa*ccc
aaa(ccc
aaa)bbb
我想找到所有包含^
or%
和 then的行bbb
。我的预期结果:
aaa^bbb
aaa%bbb
当我执行时,grep '[^%]bbb' t1
我收到了
aaa1bbb
aaa^bbb
aaa\bbb
aaa)bbb
这是完全正确的。^
是 grep[]
语法中的元宪章。我有除%bbb
正则表达式之外的所有结果。我明白这一点。我试图用\
这样的方式禁用元字符:grep '[\^%]bbb' t1
我收到了:
aaa^bbb
aaa\bbb
aaa%bbb
为什么我aaa\bbb
在结果中得到了线条?问题是:如何禁用^
grep[]
语法中字符的特殊含义?是否可以不使用fgrep
或其他解决方法?
解决方案
要^
在括号表达式中创建文字 char,请将其放在 NOT 开头:
grep '[%^]bbb' t1
这是所谓的“智能放置”技术的一部分,例如,要在括号表达式中使用 a ]
,它必须放置在括号表达式的开头,并且-
应该位于括号表达式的开头或结尾。
查看在线演示:
#!/bin/bash
s='aaa1bbb
aaa^bbb
aaa\bbb
aaa%bbb
aaa*ccc
aaa(ccc
aaa)bbb'
grep '[%^]bbb' <<< "$s"
输出:
aaa^bbb
aaa%bbb
推荐阅读
- flutter - 即使使用 ScrollPhysics 也无法滚动 ListView
- regex - 使用记事本++中的查找/替换和正则表达式复制id="uniqueid" as name="uniqueid"
- python - Keras 多输出,自定义损失函数
- sqlite - 续集内存中的sqlite测试隔离数据库?
- c# - 如何为 Spring.Net 属性注入配置 xml 文件
- flutter - flutter: 如何在大量Container中修改一个Container的颜色
- c# - 显示默认 Gmap winfrom
- c# - C# 中 Python 的 partition()?
- r - 您将如何在 R 中使用 tidyverse 对列进行基底处理?
- c# - 如何在 C# 中访问 Forms Pro Page html 文本?