Tengo una lista de direcciones de memoria aleatorias guardadas en un archivo de texto, y necesito sedeliminarlas, decodificarlas y guardarlas nuevamente en mi archivo. Sin embargo, la operación de decodificación que intento realizar se maneja en un programa C ++ que he creado hace algún tiempo. El problema que encuentro ahora es ejecutar C ++ dentro del sedcomando; es decir, quiero hacer una referencia a la parte que necesita ser decodificada y usarla como argumento en mi programa C ++. He escrito el siguiente comando:
cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
antes tuve la oportunidad de leer una respuesta en esta publicación que decía que sedNO ejecuta comandos. ¿Es cierto que sedno permite la ejecución de comandos? Si es así, suponiendo que el comando que he escrito es una sedsecuencia válida , ¿cómo lo escribiría perl?
fuente

Respuestas:
perl -pe: likesed: procesa la entrada una línea a la vez$_, evalúa la expresión perl [e] x pasada-epara cada línea y [p] rint la modificación$_para cada una.s|X|Y|gei: SustitutoYparaXen$_([g] lobally, caso [i] nsensitively, y tratarYcomo un Perl [e] Xpression lugar de una cadena básica).(?<=0x): mira hacia atrás para0x.[0-9a-f]{1,8}: de uno a 8 dígitos hexadecimales, tantos como sea posible`./convAddrs $&`: reemplazar por la salida de esa línea de comando de shell donde$&se reemplaza por la parte coincidente.fuente
/aquí, ya que se usa dentro de la pieza de repuesto. CorregidoPuede o no ser cierto que
sedno pueda ejecutar comandos. Es no verdadera de un GNUsed:No me queda claro exactamente qué más podría haber en su
<$1entrada, por lo que me aseguro de#comentar cualquier cosa que no estécommand \2en el espacio del patrón. Cuando usa eleindicador xecute de GNU en unas///sustitución, pasa todo el espacio de patrón resultante$SHELL -ccomo su segundo argumento, y luego reemplaza todo el espacio de patrón con lo que esté escrito en ese$SHELLstdout. Así que arriba imprimo cualesquiera que fueran sus resultados antes, y luego después de los resultados de pasar la línea de comandos al shell.fuente