Haga una llamada al sed
que escribe el script sed y otro para usarlo? Si sus listas están en archivos listA
y listB
, entonces:
paste -d : listA listB | sed 's/\([^:]*\):\([^:]*\)/s%\1%\2%/' > sed.script
sed -f sed.script files.to.be.mapped.*
Estoy haciendo algunas suposiciones generalizadas acerca de 'palabras' no contiene o bien dos puntos o símbolos por ciento, pero se puede adaptar alrededor de eso. Algunas versiones de sed
tienen límites superiores en la cantidad de comandos que se pueden especificar; si eso es un problema porque sus listas de palabras son lo suficientemente grandes, entonces puede que tenga que dividir el script sed generado en archivos separados que se aplican, o cambiar para usar algo sin el límite (Perl, por ejemplo).
Otro elemento a tener en cuenta es la secuencia de cambios. Si desea intercambiar dos palabras, debe elaborar sus listas de palabras cuidadosamente. En general, si asigna (1) palabraA a palabraB y (2) palabraB a palabraC, importa si el script sed hace mapeo (1) antes o después del mapeo (2).
La secuencia de comandos que se muestra no tiene cuidado con los límites de las palabras; puede tener cuidado con ellos de varias maneras, dependiendo de la versión de sed
que esté utilizando y sus criterios para lo que constituye una palabra.
Agradable, en general, pero con un problema potencial. Esta solución no preserva necesariamente el espaciado entre palabras en las líneas donde se realizan los cambios; las corridas de espacios en blanco se cambian a espacios individuales. Como no conocemos la naturaleza del texto, podría no ser un problema e incluso podría ser una ventaja. De todos modos, +1 de mi parte. –
Esto es claramente más eficiente que la solución a continuación que escribe un script sed. Terminado en 3 minutos, lo que tomó 3 días con la solución sed. También reemplaza solo palabras completas, aunque esto no es lo que se pidió. –
Esto resuelve el propósito, pero ¿cómo preservar los espacios en blanco? Parece que el script awk los reemplaza con solo un espacio en blanco. – Guru