gpt4 book ai didi

regex - 使用正则表达式查找多个文件扩展名的命令

转载 作者:行者123 更新时间:2023-12-04 03:58:04 27 4
gpt4 key购买 nike

我想知道这在 find 命令中是否可行。我试图找到所有具有以下扩展名的特定文件,然后它将被 SED。这是我当前的命令脚本:

find . -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | xargs sed -i -e 's/%%MEFIRST%%/mefirst/g'

不幸的是,我对正则表达式不太熟悉,但我需要这样的东西。

最佳答案

我在评论中看到您发现了如何通过非标准标志 find -regex RE 使用 GNU 基本正则表达式来转义它,但您也可以指定一种支持它而没有任何转义的正则表达式,使其更加清晰:
GNU findutils (Linux),使用 -regextype posix-extended :

find . -regextype posix-extended -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | …
在 BSD 中查找( FreeBSD findMac OS X find ),使用 -E :
find . -E -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | …
POSIX spec for find根本不支持正则表达式,但它支持通配符通配符和 -or ,所以你可以完全移植这个冗长的怪物:
find . -name '*.sh' -or -name '*.ini' -or -name '*.conf' \
-or -name '*.vhost' -or -name '*.xml' -or -name '*.php' | …
确保这些 glob 被引用,否则 shell 会过早地扩展它们并且你会得到语法错误(因为例如 find -name a.sh b.sh … 不会在两个匹配的文件之间插入 -or -name 并且它不会扩展到子目录中的文件)。

关于regex - 使用正则表达式查找多个文件扩展名的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22624905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com