我試圖在幾個.txt文件的文本中找到某個特定的序列。我正在尋找一個連接到4位數字的字符串。例如Watson1990。我使用在線測試器測試了正則表達式,它似乎可以工作,但表達式(或它的組合)未能在我的文件上生成輸出。使用grep查找字符串模式
我的正則表達式如下:
egrep '\w*\d{4}' *.txt
但是它不會產生任何輸出。你能告訴我這有什麼問題嗎?我正在使用OSX(雪豹)。
謝謝。
我試圖在幾個.txt文件的文本中找到某個特定的序列。我正在尋找一個連接到4位數字的字符串。例如Watson1990。我使用在線測試器測試了正則表達式,它似乎可以工作,但表達式(或它的組合)未能在我的文件上生成輸出。使用grep查找字符串模式
我的正則表達式如下:
egrep '\w*\d{4}' *.txt
但是它不會產生任何輸出。你能告訴我這有什麼問題嗎?我正在使用OSX(雪豹)。
謝謝。
正則表達式不起作用的原因是,在擴展正則表達式語法中,令牌\d
與字母d
(不是數字)匹配。改爲使用字符類[0-9]
。
另外\w
匹配數字以及字母,所以你可能不希望在這裏使用它。使用字符類[A-Za-z]
來匹配A-Z或a-z中的字母。
我將*
更改爲+
,因爲大概您希望在數字前至少有一個字母。 +
的意思是「一個或多個」,而*
的意思是「零個或多個」。
最後,您可能希望考慮如果您看到5位數字會出現什麼情況。您的正則表達式當前接受它,因爲5位數字以4位數字開頭。
總之,試試這個:
egrep '[a-zA-Z]+[0-9]{4}' *.txt
你的正則表達式使用Perl,而不是擴展,正則表達式的組件。嘗試
grep -P '\w\d{4}' *.txt
如果您的grep版本具有該選項。我使用的是GNU grep 2.5.1,-P
選項被列爲「高度實驗性」。
Bryers +1如果你到OP解釋爲什麼他的命令是錯誤的...我知道他真的只是在尋找一個可行的命令,但解釋爲什麼他不將作出更好的回答。 – Stephen 2010-09-06 13:34:53
@Stephen:好的......如果你正確拼寫我的名字,我會贊成你的評論。 ;) – 2010-09-06 14:05:18
謝謝 - 看起來像一個更嚴格的方法,我對它的工作方式也有了更好的理解。 – djq 2010-09-06 14:28:21