(bash)grep-我没有对输入文件进行不区分大小写的搜索
我正在尝试搜索包含多个文件的文件夹。文件名用大写字母书写,小写字母扩展名为.sub:(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”中搜索模式
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手册页的解释有点模棱两可。有没有办法报告这类事情?我想这会很好:)。