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

标签 regex file sed find xargs

我想知道这在 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/

相关文章:

javascript - 正则表达式匹配 3 或 6 类型

regex - SQLite3 正则表达式和模式约束

php - 我们可以将ckeditor数据保存到doc文件中吗

jquery - 将另一个文件中的 HTML 数据 append 到 div

正则表达式匹配至少 n 次但不超过 m 次

javascript - JavaScript 中的正则表达式恰好有 6 位数字且至少有两个不同的数字

Python:通过比较文件输入创建具有多个值的新字典

awk - sed 或 awk : group by paragraphs consisting of 2nd upto n+1th lines of each paragraph

regex - Sed:仅当标记与第一个字符串匹配时才转换为 xml 标记

python - 从pycharm中重组的文本文件中删除面包屑