Estou escrevendo um script que usa o comando sed para substituir em um arquivo o identificador específico. Atualmente o script tem os comandos sed codificados
Método ex-atual:
s*ed 's/@Number@/ ' "${Number}" '/g; s/@Value@/ ' "${Value}" '/g;
s/@Socket@/ ' "${Socket}" '/g' File_Template > index.html*
Devido ao fato de que o comando sed não será mais codificado e estamos executando muitos processos com diferentes requisitos sed, gostaria de fazer algo assim
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
Isso funcionou em uma plataforma Linux como um .sh
script, mas preciso fazer isso em . ksh unix
e continuo não conseguindo analisar.
ERRO:
sed: Não é possível encontrar ou abrir o arquivo s/@Number@/npdsfg/g;.
sed: Não é possível encontrar ou abrir o arquivo s/@Value@/SQR.
sed: Não é possível encontrar ou abrir o arquivo #s/@Socket/semi_/g;.
Responder1
Isso não é consequência da mudança de um sistema baseado em Linux para algum sistema não baseado em Linux (AIX, por acaso?). É um mal-entendido fundamental sobre como o shell analisa e executa comandos.
Você não pode escrever isso e esperar que ele grave um carimbo de data/hora em um arquivo:
v="date > /tmp/date.txt"
$v
Da mesma forma, você não pode escrever isso e fazer substituições e gravar os resultados em um arquivo de saída
v="s/abc/XYZ/ /tmp/source > /tmp/destination"
sed $v
O redirecionamento de arquivo não pode ser especificado dentro da variável.
O que acho que você está procurando é sed -f
onde você pode criar um arquivo de substituições e aplicá-las a um arquivo de dados de origem:
#!/bin/ksh
# Usage: thisprogram <transform_file> <src_file> <dst_file>
#
transform="$1"
src="$1"
dst="$2"
sed -f "$transform" "$src" >"$dst"
O arquivo de transformação pode conter operações como estas:
s/@Number@/1234/g
s/@Value@/somevalue/g
s/@Socket@/99b44/g
Obviamente você teria que preparar isso dentro do contexto da execução específica.
Com mais detalhes em sua pergunta, talvez seja possível levar essa solução adiante, mas confio que você tenha informações suficientes aqui para retrabalhá-la para seu caso de uso específico.