假设,我有一个如下所示的文件:
aaa1bbb
aaa^bbb
aaa\bbb
aaa%bbb
aaa*ccc
aaa(ccc
aaa)bbb
Run Code Online (Sandbox Code Playgroud)
我想找到包含^or%和 then的所有行bbb。我的预期结果:
aaa^bbb
aaa%bbb
Run Code Online (Sandbox Code Playgroud)
当我执行时grep '[^%]bbb' t1我收到了
aaa1bbb
aaa^bbb
aaa\bbb
aaa)bbb
Run Code Online (Sandbox Code Playgroud)
这是完全正确的。^是 grep[]语法中的元字符。我有除正则表达式之外的所有结果%bbb。我明白这一点。我尝试用\这样的方式禁用元字符:grep '[\^%]bbb' t1我收到了:
aaa^bbb
aaa\bbb
aaa%bbb
Run Code Online (Sandbox Code Playgroud)
为什么我的aaa\bbb结果中出现了一行?问题是:如何禁用^grep[]语法中字符的特殊含义?fgrep不使用或其他解决方法是否可以?
要^在方括号表达式内创建文字字符,请将其 NOT 放在其开头:
grep '[%^]bbb' t1
Run Code Online (Sandbox Code Playgroud)
这是所谓的“智能放置”技术的一部分,例如,要使用]括号内表达式,它必须放置在括号表达式的开头,并且-应该位于括号表达式的开头或结尾。
查看在线演示:
#!/bin/bash
s='aaa1bbb
aaa^bbb
aaa\bbb
aaa%bbb
aaa*ccc
aaa(ccc
aaa)bbb'
grep '[%^]bbb' <<< "$s"
Run Code Online (Sandbox Code Playgroud)
输出:
aaa^bbb
aaa%bbb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |