2017-09-18 68 views
-1

我剛開始bash,我正在做一個搜索腳本,搜索文件和grep模式。簡單的想法:BASH grep模式文件名在行尾

find $HOME -type f | grep $1 

在當前腳本中,我匹配包含$ 1(文件和目錄)的所有內容。我只想匹配文件名中的模式,我不想匹配路徑中的目錄。我嘗試了很多帶有諸如「/.*^$」等符號的高級表達式來grep在特定的部分,但老實說對於一個新用戶來說有點難。

切割工具不是一個選項,因爲我想要的文件的路徑。

編輯:

正確的示例:

$ ./search test 
/home/user/documents/test.txt 
/home/user/downloads/blahtestblah.py 

不正確例如:

$ ./search test 
/home/user/test/whatever.txt 

在不正確的示例的grep在路徑匹配的關鍵詞,匹配的目錄。

+0

你能告訴我們的實際樣品的輸入和輸出,你想到了它 – Inian

+0

使用'basename'就像'find $ HOME -type f | grep $(basename $ 1)',但爲什麼你這樣做?沒有高效的方式,'發現'可以做到沒有'grep'Ty –

+0

Ty但沒有工作。我正在使用grep,因爲關鍵字必須位於名稱內部,而不僅僅是名稱本身。用一些例子編輯 – Eisenberk

回答

1

^匹配開始的字符串。嘗試:

find $HOME -type f | grep "/.*$1$" 

您也可以使用-regex開關find,而不是輸出管道,以grep

find $HOME -type f -regex ".*$1$" 
+0

Ty,但沒有工作:(。 – Eisenberk

+0

但差不多!,你的第一個腳本在擴展部分是匹配的。例如,如果我做「./search py」返回所有的.py文件。 – Eisenberk