(comando sed)-> sed $foo

(comando sed)-> sed $foo

Estoy escribiendo un script que usa el comando sed para reemplazar en un archivo el identificador específico. Actualmente el script tiene los comandos sed codificados

Ex método actual:

s*ed 's/@Number@/ '  "${Number}" '/g; s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g' File_Template > index.html*

Debido al hecho de que el comando sed ya no estará codificado y estamos ejecutando muchos procesos con diferentes requisitos sed, me gustaría hacer algo como esto

Meta:

INITIALIZE_SED_COMMAND='s/@Number@/ ' "${Number}" '/g;
        s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g;'
# Some logic happens here
INITIALIZE_SED_COMMAND="$INITIALIZE_SED_COMMAND File_Template > index.html"  ;

sed $INITIALIZE_SED_COMMAND

Esto funcionó en una plataforma Linux como un .shscript, pero necesito hacerlo en . ksh unixy sigo sin poder analizarlo.

ERROR:

sed: No se puede encontrar ni abrir el archivo s/@Number@/npdsfg/g;.

sed: No se puede encontrar ni abrir el archivo s/@Value@/SQR.

sed: No se puede encontrar ni abrir el archivo #s/@Socket/semi_/g;.

Respuesta1

Esto no es una consecuencia de pasar de un sistema basado en Linux a algún sistema que no esté basado en Linux (AIX, ¿tal vez?). Es un malentendido fundamental de cómo el shell analiza y ejecuta comandos.

No puedes escribir esto y esperar que escriba una marca de tiempo en un archivo:

v="date > /tmp/date.txt"
$v

De manera similar, no puede escribir esto y hacer que realice sustituciones y escribir los resultados en un archivo de salida.

v="s/abc/XYZ/ /tmp/source > /tmp/destination"
sed $v

La redirección de archivos no se puede especificar dentro de la variable.

Lo que creo que estás buscando es sed -fdonde puedas crear un archivo de sustituciones y aplicarlas a un archivo de datos de origen:

#!/bin/ksh
# Usage: thisprogram  <transform_file>  <src_file>  <dst_file>
#
transform="$1"
src="$1"
dst="$2"

sed -f "$transform" "$src" >"$dst"

El archivo de transformación puede contener operaciones como estas:

s/@Number@/1234/g
s/@Value@/somevalue/g
s/@Socket@/99b44/g

Obviamente tendrías que preparar esto dentro del contexto de la ejecución particular.

Con más detalles en su pregunta, podría ser posible llevar esta solución más lejos, pero confío en que tenga suficiente información aquí para reelaborarla para su caso de uso particular.

información relacionada