如何在方括号的开头添加插入符号会影响结果?

时间:2013-12-05 21:29:59

标签: regex unix grep

有什么区别:

grep "[-0-9]" xyz.lst 

grep "[^-0-9]" xyz.lst

4 个答案:

答案 0 :(得分:1)

插入符号(^)否定了该类。因此,您的第一个表达式与减号和数字0到9匹配。在第二个表达式中,它将匹配减号或数字的任何内容。

答案 1 :(得分:0)

第二个表示否定“一切不是......”

答案 2 :(得分:0)

[-0-9]是字符-的字符类和字符范围0-9,即以下-,0,1,2,3,4,5,6,7,8,9 (它匹配任何数字或连字符) )。以^开头的字符类是对该类的否定,即它匹配该类中的任何

<强>演示

$ cat file
-
1
a
2
b
3
c
-

$ grep '[-0-9]' file
-
1
2
3
-

$ grep '[^-0-9]' file
a
b
c

答案 3 :(得分:0)

其中一个发现该行中任何位置都带有数字或-(短划线)字符。

另一行发现每一行都不是数字或破折号。

例如,两个命令都会在文件中找到该行:

k9

因为那里包含了一个数字的东西,以及一些不是。

请注意,如果在第二种情况下你想要的是&#34;告诉我每行不包含数字或短划线&#34;,你想要的是其中之一:(任一命令都能工作)

grep -v '[-0-9]' xyz.lst
grep '^[^-0-9]*$' xyz.lst