Regular-Expression
確認文件名的正則表達式
根據這個執行緒:
問:我的理解是 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
當然,以上所有內容都適用於
grep
和ack
。但ack
在各方面絕對更好。:-)