A resposta provável é que:
- O arquivo de 30Gb não foi fragmentado (ou teve muito pouca fragmentação): todos os discos rígidos funcionam muito melhor com acesso sequencial (SSDs incluídos) porque eles podem armazenar em cache grandes partes do arquivo. Isso permite que eles se aproximem de seu desempenho máximo. O acesso sequencial ajudará com todos os níveis de caches.
-
sed
é um editor de fluxo; ele processa apenas uma linha por vez. Isso significa que sua pegada de memória é minúscula. Ao contrário de um editor de texto, comoemacs
ouvim
, não é necessário manter toda a cópia do arquivo na memória. - Você está editando o arquivo no local (com
-i
) que (como demonstrado por @Ramesh e também indicado em página da Wikipédia ) cria um arquivo temporário que, em seguida, torna-se o arquivo antigo.
Tudo isso significa que sed
é capaz de executar quase o mínimo de operações de arquivo: cada linha do arquivo original é lida uma vez e apenas as linhas que são correspondidas são gravadas.
Sua escolha de expressões regulares também afeta o desempenho, às vezes de maneiras muito ruins .: codificando o blog de terror .