Eu usaria o Python para isso. Coloque todo este código em um arquivo chamado mass_replace e " chmod +x mass_replace
":
#!/usr/bin/python
import os
import re
import sys
def file_replace(fname, s_before, s_after):
out_fname = fname + ".tmp"
out = open(out_fname, "w")
for line in open(fname):
out.write(re.sub(s_before, s_after, line))
out.close()
os.rename(out_fname, fname)
def mass_replace(dir_name, s_before, s_after):
for dirpath, dirnames, filenames in os.walk(dir_name):
for fname in filenames:
f = fname.lower()
# example: limit replace to .txt, .c, and .h files
if f.endswith(".txt") or f.endswith(".c") or f.endswith(".h"):
f = os.path.join(dirpath, fname)
file_replace(f, s_before, s_after)
if len(sys.argv) != 4:
u = "Usage: mass_replace <dir_name> <string_before> <string_after>\n"
sys.stderr.write(u)
sys.exit(1)
mass_replace(sys.argv[1], sys.argv[2], sys.argv[3])
Para uma única pesquisa e substituição de uma string em um tipo de arquivo, a solução com find e sed não é ruim. Mas se você quiser fazer muito processamento em um passo, você pode editar este programa para ampliá-lo, e será fácil (e provavelmente estará correto na primeira vez).