2014-01-21 30 views
0

我的“测试”文件有3种空行:为什么在这种情况下grep反转与否定不一样?

$ cat -nA test 
    1 This is line 1 and it's followed by a blank line$ 
    2 $ 
    3 This is line 2 and it's followed by a 'blank' line with 3 tab characters$ 
    4 ^I^I^I$ 
    5 This is line 3 and it's followed by a 'blank' line with 3 whitespace characters$ 
    6  $ 
    7 This is line 4$ 

如果我用grep开始与POSIX字符类空行“空白”或“空间”,我得到空行开始与标签或空白:

$ grep -n '^[[:blank:]]' test 
4:   
6: 
$ grep -n '^[[:space:]]' test 
4:   
6: 

如果我颠倒搜索我得到的所有其他线路:

$ grep -nv '^[[:blank:]]' test 
1:This is line 1 and it's followed by a blank line 
2: 
3:This is line 2 and it's followed by a 'blank' line with 3 tab characters 
5:This is line 3 and it's followed by a 'blank' line with 3 whitespace characters 
7:This is line 4 

$ grep -nv '^[[:space:]]' test 
1:This is line 1 and it's followed by a blank line 
2: 
3:This is line 2 and it's followed by a 'blank' line with 3 tab characters 
5:This is line 3 and it's followed by a 'blank' line with 3 whitespace characters 
7:This is line 4 

但是,如果我否定搜索我只得到了非空力nes:

$ grep -n '^[^[:blank:]]' test 
1:This is line 1 and it's followed by a blank line 
3:This is line 2 and it's followed by a 'blank' line with 3 tab characters 
5:This is line 3 and it's followed by a 'blank' line with 3 whitespace characters 
7:This is line 4 

$ grep -n '^[^[:space:]]' test 
1:This is line 1 and it's followed by a blank line 
3:This is line 2 and it's followed by a 'blank' line with 3 tab characters 
5:This is line 3 and it's followed by a 'blank' line with 3 whitespace characters 
7:This is line 4 

为什么在这里不作否定呢?

回答

1

[^[:space:]]表示“除[:space:]类以外的任何字符”。因此,匹配^[^[:space:]]的行必须至少有一个字符。

相关问题