linux - 用另一个文件中的字符串替换一个文件中的字符串的有效方法

标签 linux bash unix sed awk

搜索了类似的问题,但找不到任何完全适合我的需求的内容:

我有一个从多个网站抓取的非常大的 HTML 文件,我想替换所有

class="key->from 2nd file"

style="xxxx"

目前我使用 sed - 它运行良好,但仅适用于小文件

while read key; do sed -i "s/class=\"$key\"/style=\"xxxx\"/g" file_to_process; done < keys

当我尝试处理更大的东西时,需要很长时间

示例:

keys - Count: 1233 lines
file_to_ process - Count: 1946 lines

大约需要 40 秒才能完成我需要的处理的 1/10

real    0m40.901s
user    0m8.181s
sys     0m15.253s

最佳答案

未经测试,因为您没有提供任何示例输入和预期输出:

awk '
NR==FNR { keys = keys sep $0; sep = "|"; next }
{ gsub("class=\"(" keys ")\"","style=\"xxxx\"") }
1' keys file_to_process > tmp$$ &&
mv tmp$$ file_to_process

关于linux - 用另一个文件中的字符串替换一个文件中的字符串的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141599/

相关文章:

php - 简单的选择返回意想不到的结果

bash - 从字符位置开始的 bash 变量的子字符串

bash - 权限在查找 : why do we need 2>&1? 中被拒绝

c - UNIX - 我的主要语法错误

linux - 我如何使用管道或重定向在 Linux 中按照我想要的顺序将文件附加到另一个文件?

linux - du 和 size 报告目标文件的不同值

c - C中通过设备树文件获取设备地址

bash - 通过 sed 使用 unix 变量将数据附加到每行末尾

linux - 在 Linux 中使用命令行将 xlsx 转换为 csv

linux - 如何在 linux 中查看 Hive orc 文件的内容