工作這裏的文件我的工作文字:我的正則表達式不grep的
(4 spaces)Hi, everyone
(1 tab)yes
當我運行此命令 - grep '^[[:space:]]+' myfile
- 它不打印任何東西到標準輸出。
爲什麼它不匹配文件中的空格?
我使用GNU grep版本2.9。
工作這裏的文件我的工作文字:我的正則表達式不grep的
(4 spaces)Hi, everyone
(1 tab)yes
當我運行此命令 - grep '^[[:space:]]+' myfile
- 它不打印任何東西到標準輸出。
爲什麼它不匹配文件中的空格?
我使用GNU grep版本2.9。
有幾種不同的正則表達式語法。在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。
你可以使用-E
:
grep -E '^[[:space:]]+' FILE
這使得擴展的正則表達式。沒有它,你會得到BREs(基本正則表達式),它具有更簡化的語法。或者,您可以運行egrep
而不是相同的結果。
嘗試grep -P '^\s+'
代替,只要你使用GNU的grep。輸入更容易,並且具有更好的正則表達式。
這是誤導。提問者沒有使用任何需要擴展語法的功能。他只需要根據基本語法來反斜槓+符號。 – 2012-03-21 01:06:02
這是真的 - 沒有意識到它接受BRE中的字符類。將更新。 – FatalError 2012-03-21 01:10:42