(bash)grep-我没有对输入文件进行不区分大小写的搜索

(bash)grep-我没有对输入文件进行不区分大小写的搜索,grep,Grep,我正在尝试搜索包含多个文件的文件夹。文件名用大写字母书写,小写字母扩展名为.sub: AAA.sub BBB.sub CCC.sub DDD.sub 我正在使用grep搜索这些文件中的模式,但是我只希望输入文件使用小写字母 grep的手册页中写着: -i、 --忽略案例 忽略模式和输入文件中的大小写差异。(-i由POSIX指定。) 因此,如果我理解正确: grep-i分包/示意图/aaa 及 grep-i分包/示意图/AAA 无论大小写(aaa或aaa),都应该能够在文件“aaa”中搜索模式

我正在尝试搜索包含多个文件的文件夹。文件名用大写字母书写,小写字母扩展名为.sub:


AAA.sub

BBB.sub

CCC.sub

DDD.sub


我正在使用grep搜索这些文件中的模式,但是我只希望输入文件使用小写字母

grep的手册页中写着:

-i、 --忽略案例 忽略模式和输入文件中的大小写差异。(-i由POSIX指定。)

因此,如果我理解正确:

grep-i分包/示意图/aaa

grep-i分包/示意图/AAA

无论大小写(aaa或aaa),都应该能够在文件“aaa”中搜索模式“subckt”,如果文件夹中同时存在两个名为aaa和aaa的文件,我希望grep能够通过这两个文件进行搜索

但是,当我尝试使用第1条指令(小写)进行搜索时,它不起作用,给我“没有这样的文件或目录”消息。 当我尝试使用第二条指令(大写)进行搜索时,它工作正常

很明显,我理解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。(见下面我的答案)

-i
影响搜索内容的方式,而不是文件名

当手册页显示“忽略模式和输入文件中的大小写差异”时,这实际上意味着模式中忽略了大小写(搜索AAA和AAA是等效的)以及输入文件的内容(如果包含“AAA”或“AAA”甚至“AAA”,则一行将匹配)

我认为您需要在命令行中列出所有文件名,或者查找与所有文件名匹配的glob(即通配符):

grep -i subckt *.sub

在Unix/Linux shell(bash、zsh等)中,由shell(bash)而不是命令(grep)处理“*”。该命令接收文件列表,实际上无法区分用户是否键入了“grep foo*”和“grep foo file1 file2 file3”(如果目录包含这3个文件)

请尝试以下命令

找到-iname aaa.sub | grep-rn subckt


使用-iname查找选项将列出忽略其大小写的文件。在上述情况下,请查找-iname将列出aaa.sub和aaa.sub。输出通过管道传输到grep命令。

我找到了一种方法,可以通过使用perl的uc(大写)函数将grep函数的输入文件转换为大写来避免我的问题

grep命令首先是从perl脚本启动的:
grep-i subkt/schematics/aaa
所以,我只是在我的perl脚本中这样做:

$tmp=aaa

$tmp=uc($tmp)

grep-i subckt/schematics/$tmp

现在,“aaa”名称只是一个例子。在perl脚本中,它是从另一个用小写字母编写的解析文件中恢复的


感谢您的回答。

grep
使用命令行中列出的文件名。
-i
选项影响文件的内容,而不是文件的名称

您可以使用
find
选择要搜索的文件名。
-iname
选项允许您匹配忽略大小写的文件

grep subckt $(find /schematics -iname aaa.sub -print)
如果您有许多文件名,或者这些文件名包含空格或其他会使shell混淆的字符,安全可靠的方法是使用
-print0
-0
选项:

find /schematics -iname aaa.sub -print0 | xargs -r -0 grep -i subckt

你有可能在mac上吗?Mac OS X正在使用的grep早期版本中有一个已知的bug。您可以尝试使用自制软件更新您的grep版本!不,这是一个红帽Linux工作站,我很困惑。你是在试图搜索目录中的文件,还是你有一个要grep的文件列表(可能存储在文件中),或者你想grep文件的内容?我必须同意我的问题可能缺少一些细节:编辑atmOk我明白了。使用grep一次查看所有文件并不是我想做的困难,我特别想逐个搜索每个文件。看起来,即使我很难做到这一点,我也不得不强制使用大写字母作为文件路径。谢谢,P.S:我认为对grep手册页的解释有点模棱两可。有没有办法报告这类事情?我想这会很好:)。