regex - 用正则表达式查找替换文件内容

标签 regex bash find

我想递归地(在项目目录中)用“jakarta”替换“javax”一词。 这适用于以“java”结尾的文件:

find . -name '*.java' | xargs sed -i 's/javax/jakarta/g'

我也需要对 XML 文件执行相同的操作。为了使用单个命令,我尝试修改查找表达式,如下所示:

find . -regex '^.*\.(java|xml)$'

但是,没有找到任何文件。我也尝试过:

find . -regex '.*/^.*\.(java|xml)$'

但还是什么都没有。你能帮我重写查找器表达式以使用多个文件后缀吗? 谢谢

最佳答案

您仍然可以多次使用 -name 来匹配多个模式:

find . \( -name '*.java' -o -name '*.xml' \) -print0 |
xargs -0 sed -i 's/javax/jakarta/g'

如果您想使用-regex,那么您还应该使用-regexrtype选项来扩展正则表达式匹配:

find . -regextype awk -regex '.+\.(java|xml)$' -print0 |
xargs -0 sed -i 's/javax/jakarta/g'

记下 -print0xargs -0 选项以处理带有特殊字符的文件名。

关于regex - 用正则表达式查找替换文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73869636/

相关文章:

regex - 为什么输出 "True"

linux - 将 bash 表达式传递给 AWK 以进行浮点运算

linux - 递归覆盖bash中的rc文件

linux - 无法在 Linux 中更改权限为 0666 的文件的所有权

vim - zsh 函数退出后搞砸了提示

javascript - MongoDB 查找具有多个 eq 的 expr

linux - 在 Linux 中按所有者查找文件

java - 特定的正则表达式模式

r - 从 R 中的化学式中提取数字

regex - 如何在vim中替换括号