Python 2.7 y 3 solución
Esta solución reemplaza la primera aparición de una sola cadena arbitraria dada (la "aguja") en cada línea del archivo de entrada con una cadena cada vez elegida al azar del conjunto de líneas de la lista de cadenas de reemplazos.
#!/usr/bin/python
from __future__ import print_function
import sys, random
needle = sys.argv[1]
if sys.argv[2] == '-':
f_replacements = sys.stdin
else:
f_replacements = open(sys.argv[2])
with f_replacements:
replacements = [l.rstrip('\n') for l in f_replacements]
if not replacements:
raise ValueError('No replacement strings given')
if len(sys.argv) <= 3 or sys.argv[3] == '-':
f_in = sys.stdin
else:
f_in = open(sys.argv[3])
with f_in:
for s in f_in:
rep = replacements[random.randrange(len(replacements))]
print(s.rstrip('\n').replace(needle, rep, 1))
Debería ser casi trivial anclar la aguja al principio o al final de la cuerda o usar expresiones regulares por completo.
Uso
python replace-random.py NEEDLE REPLACEMENTS-FILE [INPUT-FILE]
Ejemplo:
python replace-random.py '@address.com' file2.txt file1.txt
o
python replace-random.py '@address.com' file2.txt < file1.txt