首页 > 解决方案 > 使用 awk 查找和替换目录中每个文件中的字符串

问题描述

我有一个充满输出文件的目录,文件的名称为: file1.out, file2.out,..., fileN.out.

每个文件中都有一个特定的密钥字符串,我们称之为keystring. 我想替换所有文件中的每个keystring实例newstring

如果只有一个文件,我知道我可以这样做:

awk '{gsub("keystring","newstring",$0); print $0}' file1.out > file1.out

有没有办法遍历awk中的所有N个文件?

标签: awk

解决方案


您可以使用find相同的命令。请确保在测试文件正常运行后首先在测试文件上运行它,然后只在您的实际路径(在所有实际文件上)运行它以更安全。这也需要gawk更新的版本,其中包含inplace将输出保存到文件本身的选项。

find your_path -type f -name "*.out" -exec awk -i inplace -f myawkProgram.awk {} +

您的awk程序如下:根据您显示的示例(cat myawkProgram.awk仅在此处显示您的 awk 程序的内容)。

cat myawkProgram.awk
{
  gsub("keystring","newstring",$0); print $0
}


第二个选项是通过执行类似的操作将所有.out格式文件传递到您的gawk程序本身-inplace(但再次确保您首先在单个测试文件上运行它,然后在您被命令说服后运行实际命令以获得更安全的一面):

awk -i inplace '{gsub("keystring","newstring",$0); print $0}' *.out

推荐阅读