2012-03-21 83 views
6

工作這裏的文件我的工作文字:我的正則表達式不grep的

(4 spaces)Hi, everyone 

(1 tab)yes 

當我運行此命令 - grep '^[[:space:]]+' myfile - 它不打印任何東西到標準輸出。

爲什麼它不匹配文件中的空格?

我使用GNU grep版本2.9。

回答

6

有幾種不同的正則表達式語法。在grep文檔中,grep的缺省名稱爲basic語法。

從人的grep(1)

In basic regular expressions the meta-characters 
?, +, {, |, (, and) lose their special meaning; instead 
use the backslashed versions \?, \+, \{, \|, \(, and \). 

因此而不是+你應該輸入\+

grep '^[[:space:]]\+' FILE 

如果你需要從你的正則表達式更多的權力,我也鼓勵你可以看看Perl的正則表達式語法。他們通常被認爲是最具表現力的。有一個名爲PCRE的C庫模擬它們,並且指向它的grep鏈接。要使用它們(而不是基本語法),可以使用grep -P

2

你可以使用-E

grep -E '^[[:space:]]+' FILE 

這使得擴展的正則表達式。沒有它,你會得到BREs(基本正則表達式),它具有更簡化的語法。或者,您可以運行egrep而不是相同的結果。

+0

這是誤導。提問者沒有使用任何需要擴展語法的功能。他只需要根據基本語法來反斜槓+符號。 – 2012-03-21 01:06:02

+0

這是真的 - 沒有意識到它接受BRE中的字符類。將更新。 – FatalError 2012-03-21 01:10:42

1

我找到你需要躲避+

grep '^[[:space:]]\+' FILE 
+0

我對此感到困惑,它是如何工作的 – dldnh 2012-03-21 01:02:51

+0

@dldnh:看到我的回答 – 2012-03-21 01:05:14

+0

aha,謝謝,@ user1131467! – dldnh 2012-03-21 01:06:31

0

嘗試grep -P '^\s+'代替,只要你使用GNU的grep。輸入更容易,並且具有更好的正則表達式。