2017-08-16 46 views
-1

我試圖在包含多個文件的文件夾內進行搜索。這些文件的名稱是用大寫與.SUB擴展小寫:(bash)grep -i不會對輸入文件不敏感搜索大小寫


AAA.sub

BBB.sub

CCC.sub

DDD.sub


我正在使用grep搜索模式槽這些文件,但是我想只使用lo用於輸入文件的大寫字母。

在grep的手冊頁上寫着:

-i,--ignore情況 忽略模式和輸入文件都需要區分大小寫。 (-i是由POSIX指定。)

所以,如果我正確理解:

的grep -i子電路/原理圖/ AAA

grep的-i subckt/schematics/AAA

假設無論其情況如何(AAA或aaa)都能夠搜索文件「aaa」中的模式「子文件」,並且如果在文件中同時存在兩個名爲aaa和AAA的文件,我期望grep來搜索它們兩個。

但是,當我嘗試我的搜索與第一條指令(小寫)它不起作用,給我「沒有這樣的文件或目錄」消息。 當我嘗試使用第二條指令(大寫)進行搜索時,它正常工作。

我明顯理解grep -i選項的問題,誰能給我一個關於這個問題的答案?

使用grep時輸入文件是否可能不區分大小寫?

編輯: 我的問題是缺乏細節,甚至強硬。我已經找到了答案,我的問題,我將在此添加,以防別人絆倒細節:

我有一個文件,其中包含每一個列表文件名我想grep。我的名單看起來是這樣的:

AAA電容C_0

BBB電容C_0

CCC電阻R_IN

...

grep的是一個Perl腳本內部完成,Perl腳本解析列表文件,並得到一個while循環中每個單獨的文件名(AAA BBB CCC)的名稱。 然而,列表文件中的名字是用小寫的,而我想要grep的文件的名字是用大寫字母寫的。

這就是爲什麼我想有輸入文件搜索不區分大小寫,這樣我可以直接做grep -i subck aaa,它會在文件中搜索「AAA」

然而,由於grep的是從啓動perl腳本,並且由於顯然不可能讓grep的行爲如此,我使用perl的uc()函數將aaa轉換爲AAA,並使用它執行grep。 (見我的回答如下)

+0

你是否在Mac上有任何機會? Mac OS X正在使用的早期版本的grep中存在一個已知的錯誤。你可以嘗試使用自制軟件更新你的grep版本! – zoubida13

+0

不,這是一個紅帽子Linux工作室 – meldigoth

+0

我很困惑。你是想搜索一個目錄中的文件,還是你有一個你想grep的文件列表(可能存儲在一個文件中),或者你想grep文件的內容? – TomOnTime

回答

-1

-i影響的內容是如何搜索,文件沒有名稱。

當男人頁面上顯示「忽略大小寫區別的模式和輸入文件兩者。」這實際上意味着情況下,在圖案被忽略(搜索AAA和AAA是等同的)和輸入的文件的內容(如果它包含「AAA」或「AAA」或甚至「AAA」的線將匹配)

我想你想要麼列出所有命令行上的文件名,或者發現所有的文件名匹配的水珠(即通配符):

grep -i subckt *.sub 

在Unix/Linux下殼(bash中,zsh中,等)「*」由shell(bash)而不是命令(grep)處理。該命令收到文件列表,實際上無法分辨用戶是否鍵入「grep foo *」和「grep foo file1 file2 file3」(如果該目錄包含這3個文件)之間的區別

+0

好吧,我明白了。 使用grep一次查看所有文件並不是我想要做的事情,我特別想要逐個搜索每個文件。 看來,即使很難我不願意這樣做,我必然會強制使用大寫的文件路徑。 感謝艱難 P.S:我認爲grep手冊頁的解釋有點含糊不清。有沒有辦法報告這種事情?這將是很好,我認爲:)。 – meldigoth

0

請嘗試執行以下操作命令

找到。 -iname aaa.sub | grep的-rn子電路

找到-iname選項會列出文件忽略了他們的情況。在上面的案例中找到。 -iname將列出aaa.sub & AAA.sub。輸出被傳送到grep命令。

0

我已經找到一種方法,通過使用UC(大寫)的Perl的功能,輸入文件轉換爲grep的功能爲大寫字母,以規避我的問題。

grep命令是從一個Perl腳本發起擺在首位: grep -i subckt /schematics/aaa 所以,我只是做了,在我的Perl腳本:

$ TMP = AAA

$ TMP = UC($ TMP)現在

grep -i subckt /schematics/$tmp

的 「AAA」 的名字僅僅是一個例子。在perl腳本中,它是從小寫的另一個解析文件中恢復的。

感謝您的答案艱難。