regex - 更改文件夹中的所有匹配项

标签 regex linux shell sed

我需要对文件夹(及其子文件夹)中的所有文件进行正则表达式查找和替换。执行此操作的 linux shell 命令是什么?

例如,我想对所有文件运行此命令,并用新的替换文本覆盖旧文件。

sed 's/old text/new text/g' 

最佳答案

仅使用 sed 是无法做到的。您至少需要同时使用 find 实用程序:

find . -type f -exec sed -i.bak "s/foo/bar/g" {} \;

此命令将为每个更改的文件创建一个 .bak 文件。

注意事项:

  • sed 命令的 -i 参数是 GNU 扩展,因此,如果您使用 BSD 的 sed 运行此命令,您将需要将输出重定向到一个新文件,然后重命名它。
  • find 实用程序没有在旧的 UNIX 机器中实现 -exec 参数,因此,您需要使用 | xargs 代替。

关于regex - 更改文件夹中的所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/905144/

相关文章:

linux - 如何从 netatalk 2.0.5 为 opensuse 11.2 创建 RPM 版本

json - 使用 jq 将 JSON 值提取到 shell 变量

regex - Powershell Replace中的Escape Tilde

java - Java能不能像C一样直接打开设备文件节点?

windows - 代码如何存储在可执行文件中?

linux - 这段bashquery的逻辑

bash - grep 一个模式并输出行的不匹配部分

python - 给定的正则表达式与末尾不匹配

javascript 正则表达式因双引号而失败

php - 正则表达式仅适用于 URL 中的特定域名