2014-01-21 26 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:]]的行必須至少有一個字符。

相關問題