用find和regex区分.h和.sh
我正在尝试从目录中删除具有特定扩展名的文件。我使用的命令无法区分.h和.sh。我在哪里可以改进我的正则表达式 这是我当前的命令:用find和regex区分.h和.sh,regex,linux,bash,redhat,Regex,Linux,Bash,Redhat,我正在尝试从目录中删除具有特定扩展名的文件。我使用的命令无法区分.h和.sh。我在哪里可以改进我的正则表达式 这是我当前的命令: find directory/ -type f -regextype posix-extended -regex '.*.(java|[hc]|cpp|hpp|cc|hh)' 目前它返回.csh和.sh文件。我不希望这种情况发生。当我删除“[hc]”时,这就解决了问题,但是我找不到任何.c或.h文件。我也试过了 find directory/ -type f -r
find directory/ -type f -regextype posix-extended -regex '.*.(java|[hc]|cpp|hpp|cc|hh)'
目前它返回.csh和.sh文件。我不希望这种情况发生。当我删除“[hc]”时,这就解决了问题,但是我找不到任何.c或.h文件。我也试过了
find directory/ -type f -regextype posix-extended -regex '.*.(java|h|c|cpp|hpp|cc|hh)'
但这也会返回.csh和.sh文件。添加一个输入结束锚点:
find ... -regex '.*\.(java|h|c|cpp|hpp|cc|hh)$'
这使列表成为一个绝对的扩展列表,而不仅仅是扩展的前缀。您可以尝试避开点
*\。(java |[hc]| cpp | hpp | cc | hh)
btw[hc]
与工作的第四鸟相同。谢谢大家!@代码是肯定的,但最小的更改强调了解决方案,而且我对您的建议也存在可读性问题——当您简单地列出您想要的内容时,更容易看到发生了什么。此外,您可以很容易地从文件内容构建普通正则表达式;当你进行微观优化时,你往往会失去simplicity@CodeManiac您的正则表达式错误地匹配了这里的最后两个测试字符串:您可以通过使用backreference使其工作,但是是的,如果您想看到一个工作的话,这将是@Bohemian建议的丑陋