【发布时间】:2012-07-19 21:10:30
【问题描述】:
文件data中有一行,如
[总体],....
当使用grep获取这一行时,我发现这只能通过
grep "\[overall]" 数据
只是出于好奇,为什么它需要逃避[ 而不是]。
编辑:这是在 ubuntu 12.04 上测试的
【问题讨论】:
标签: bash shell command-line grep
文件data中有一行,如
[总体],....
当使用grep获取这一行时,我发现这只能通过
grep "\[overall]" 数据
只是出于好奇,为什么它需要逃避[ 而不是]。
编辑:这是在 ubuntu 12.04 上测试的
【问题讨论】:
标签: bash shell command-line grep
因为]只有在它前面已经有一个未被转义的[时才具有任何特殊含义。
你可以通过以下方式获得乐趣(如果你有正确的、有点扭曲的心态):
grep '[][-]' ...
这会搜索]、[ 或-。你必须小心] 的位置;它必须在角色类的开头。您必须小心- 的位置;它必须在课程开始或结束时进行。并且否定类的插入符号必须先出现。
grep '[^][-]' ...
【讨论】:
我猜如果没有开头 [ 来指定字符类,则结尾 ] 没有任何意义。因此,一旦您转义了左括号,就不需要转义结束括号。
【讨论】:
我赞同 Derek 和 Jonathan 的回答。一年来,我发现自己使用 fgrep 的次数比使用 grep 的次数要多。 fgrep 与grep -F 或grep --fixed-strings 相同,其中搜索词只是一个字符串,而不是正则表达式。比如我要搜索[overall]:
fgrep "[overall]" file
【讨论】: