Regular-Expression

確認文件名的正則表達式

  • January 13, 2015

根據這個執行緒

問:我的理解是 ack 使用 Perl 派生的正則表達式,對嗎?

答:是的。事實上,ack 是用 Perl 編寫的,只是將表達式轉發到內部引擎。

現在,我在目前目錄下有一個文件,名為:

media_group_xml_producer.py

當我做:

> ack -n '.*group.*producer.*' 

或更直接地:

> ack -n --python '.*group.*producer.*' 

我沒有得到任何結果。據我所知,正則表達式應該匹配這個文件。為什麼會錯過它?

如果您只需要對目前目錄中的文件名進行 grepping

ack 匹配文件的內容,而不是文件名。要查找名稱與正則表達式匹配的文件,請在文件名列表上執行 ack:

ls | ack '.*group.*producer.*'

你做了什麼,即

ack -n '.*group.*producer.*'

而是在目前目錄中查找包含與正則表達式匹配的內容的文件。

如果你想在完整的文件名上執行你的正則表達式,包括子目錄路徑

ls不會剪切它,因為它沒有列印路徑和文件名的選項。相反,使用tree標誌-i(不列印縮進行)和-f(列印完整文件名)。

tree -if | ack 'shepherd.*\.pyc?'

返回

./models/shepherd.py
./models/shepherd.pyc
./services/shepherd-related/flock_of_sheep.py
./services/shepherd-related/flock_of_sheep.pyc

當然,以上所有內容都適用於grepack。但ack在各方面絕對更好。:-)

引用自:https://unix.stackexchange.com/questions/178910