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

我需要对文件夹(及其子文件夹)中的所有文件进行正则表达式查找和替换。执行此操作的 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 代替。

https://stackoverflow.com/questions/905144/

相关文章:

python - Python中有标签/转到吗?

python - 如何在 Python 中获取线程 id?

c - dup2/dup - 为什么我需要复制文件描述符?

linux - 如何让 sed 从标准输入中读取?

linux - bash - 如何将结果从 which 命令传送到 cd

python - 什么是好的速率限制算法?

linux - 如何 cat <> 包含代码的文件?

python - 列表列表到 numpy 数组中

python - 如何通过 Django 发送电子邮件?

linux - 在 Bash 脚本中引发错误