Unix shell 脚本:find-result可以独立于字符串大小写吗?

0tdrvxhp  于 2023-01-31  发布在  Shell
关注(0)|答案(2)|浏览(123)

首先,我不是shell脚本的星星,更习惯于用Python编程,但必须使用现有的Python脚本,它通过子进程调用Unix命令。
在此脚本中,我们使用2个find命令来检查是否可以在xml文件/文件名中找到2个特定字符串:

FIND_IN_FILE_CMD: find <directory> -name *.xml -exec grep -Hnl STRING1|STRING2 {} +
FIND_IN_FILENAME_CMD: find <directory> ( -name *STRING1*xml -o -name *STRING2*xml )

我们看到的问题是STRING 1和STRING 2并不总是大写的,现在我可以做一些类似STRING1|STRING2|String1|String2|string1|string2( -name *STRING1*xml -o -name *STRING2*xml -o -name *String1*xml -o -name *String2*xml -o -name *string1*xml -o -name *string2*xml )的事情,但是我想知道是否有更有效的方法可以一次性完成这个检查,基本上可以匹配所有不同的写作风格。
有人能帮我吗?

fdbelqdn

fdbelqdn1#

可以将-i选项与grep命令一起使用,以执行不区分大小写的搜索:

FIND_IN_FILE_CMD: find <directory> -name *.xml -exec grep -Hnil -i STRING1|STRING2 {} +
FIND_IN_FILENAME_CMD: find <directory> ( -name *STRING1*xml -o -name *STRING2*xml -o -name *[Ss][Tt][Rr][Ii][Nn][Gg]1*xml -o -name *[Ss][Tt][Rr][Ii][Nn][Gg]2*xml -o -name *[sS][tT][rR][iI][nN][gG]1*xml -o *[sS][tT][rR][iI][nN][gG]2*xml )

这样,grep命令将在*.xml文件中以不区分大小写的方式搜索STRING1STRING2
在第二个命令中,您可以使用-o选项在多个文件名模式之间执行“or”操作,这样您就不需要多次重复整个命令。在这里,我使用了带有不同大小写字符的方括号来匹配文件名中STRING1和STRING2的任何变体。

3yhwsihp

3yhwsihp2#

如果您打算继续使用find,只需将-name替换为不区分大小写的版本-iname

相关问题