2014-07-25 41 views
0

有人可以幫忙嗎?
爲什麼命令awk過濾失敗'/ x20- x7F /'

awk '!/\x20-x7F/ 

打印的字母 「a」 時與字母 「a」 中的CentOS 5運行,5.97 coreutils的,提供的bash 4.2.0(1)?由於字母「a」是\ x61,因此該命令應該否定過濾字母「a」。

此外,

awk '/\x20-x7F/ 

不打印的「一」,在相同的情況下,但將打印比\ 0x7F部分更大的角色?

回答

1

正則表達式不能這樣工作。

/\x20-x7F/ 

這意味着字符-x7Fspace + - + x + 7 + F

它不會從根本 - >到。它只是將\x20轉換爲空格,並將其餘字符作爲字符。

cat file 
1 a 
2 b 
3 -x7F 
4 c 

這給出了第3行,因爲它有你正在尋找的模式。

awk '/\x20-x7F/' 
3 -x7F 

她需要的所有訂單除了線3

awk '!/\x20-x7F/' 
1 a 
2 b 
4 c 
+0

對不起,我忘了在我的stackoverflow例子中的x7F前面輸入反斜槓,儘管它在我的命令行中。所以,awk'/ \ x20- \ x7F /'不能按我的意願工作。 – user3877935

+0

@ user3877935如果添加反斜槓,它將變成' - '。最後的空間是ascii 127(7f)。這是一種表達,而不是從一個角色到另一個角色。它就像'/ a-b /' – Jotne

+0

一樣謝謝。我不太瞭解你的評論。你會寫什麼awk語句來僅打印由x20到x7F範圍內的字符組成的行? – user3877935

2

字符範圍被包含在方括號,例如例如[0-9],並且用梳子炭灰否定[^0-9]。嘗試awk '/[^\x20-\x7F]/',假設\x20\x7F識別一些字符。

+0

謝謝你,埃德。我得到一個語法錯誤在打開「[」。 – user3877935

+1

@ user3877935它應該是'awk'/ [\ x20- \ x7F] /''。 – Jotne

+0

更新,謝謝@Jotne –