Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

使用awk查找和替换目录中每个文件中的字符串

我有一个目录全输出的文件,与文件名的文件: file1.outfile2.out,..., fileN.out

每个文件中都有一个特定的字符串,我们称它为keystring我想keystringnewstring所有文件中的替换每个实例

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

您可以使用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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...