2013-09-23 29 views
0

好吧我不知道我明白爲什麼這個grep行匹配的文件不包括在 - 包括選項。我嘗試過逃避一些方法,但似乎無法讓它做我想做的事情。如何grep與 - 包含匹配此文件(當我不想要它)

迪爾上市

[email protected]:~/dir$ ls -lR 
.: 
total 20 
-rw-rw-r-- 1 ryan ryan 19 Sep 23 00:40 bar 
-rw-rw-r-- 1 ryan ryan 19 Sep 23 06:18 bar.shit 
drwxrwxr-x 2 ryan ryan 4096 Sep 23 04:51 boo 
-rw-rw-r-- 1 ryan ryan 4 Sep 23 05:25 foo.txt 
-rwxrwxr-x 1 ryan ryan 1597 Sep 23 06:18 rfind 
lrwxrwxrwx 1 ryan ryan 13 Sep 23 00:30 ruby -> /usr/bin/ruby 

./boo: 
total 4 
-rw-rw-r-- 1 ryan ryan 0 Sep 23 04:51 bar.foo.txt 
-rw-rw-r-- 1 ryan ryan 86 Sep 23 00:44 foo 
-rw-rw-r-- 1 ryan ryan 0 Sep 23 04:51 foo.txt 

運行下面的grep線匹配文件「酒吧」,當我期待它僅匹配的文件擴展名,我通過--include

[email protected]:~/ass2$ grep --include=*.{rb,erb,js,css,html,yml,txt} -inHR foo ./* 
./bar:1:inside here is foo 
./bar.shit:1:inside here is foo 

回升我要麼不轉義正確的東西,要麼丟失沒有擴展名的文件變得有效。

感謝

回答

1

這是因爲在命令中,這將導致在當前目錄下的所有文件,包括年底的水珠./*的,不考慮--include指令。如果你改變命令爲

grep --include=*.{rb,erb,js,css,html,yml,txt} -inHR foo . 
#              ^- Instead of ./* 

那麼你應該得到你所期望的輸出。

0

它隨着shell的擴展而擴展,因爲它處於開放狀態。正確的方法是:

grep --include='*.rb' --include='*.erb' --include='*.js' --include='*.css' --include='*.html' --include='*.yml' --include='*.txt' -inHR foo ./*