我有一个 ~19MB 的文本文件,我想对它执行许多查找/替换操作。我最初编写脚本是为了循环执行 sed 操作,例如
sed -i "s|$pattern|$replacement|g" $textfile
在我的情况下,每个操作大约需要 0.5 秒。我认为我可以通过先将文本加载到内存中,然后循环执行原生 bash 子字符串替换来加快速度,例如
text=$(<$textfile)
text=${text//$pattern/$replacement}
但令我惊讶的是,每次替换大约需要 7.5 秒(15 倍),不包括初始加载或后续保存。为什么 sed 比原生 bash 字符串替换快这么多?我最终使用了
text=$(sed "s|$pattern|$replacement|g" <<< "$text")
这比每次直接执行 sed 快约 20%,但再次让我感到惊讶的是 ${text//$pattern/$replacement} 的速度如此之慢。根本无法与之匹敌。有没有更高效的语法?我使用的是 GNU bash 5.1.16(1)。