(команда sed)-> sed $foo

(команда sed)-> sed $foo

Я пишу скрипт, который использует команду sed для замены в файле определенного идентификатора. В настоящее время скрипт имеет команды sed, жестко закодированные

Метод текущего измерения:

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

В связи с тем, что команда sed больше не будет жестко закодирована, а мы запускаем много процессов с различными требованиями sed, я хотел бы сделать что-то вроде этого

Цель:

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

Это работало на платформе Linux как .shскрипт, но мне нужно сделать это в . ksh unixи я постоянно сталкиваюсь с проблемой невозможности его анализа.

ОШИБКА:

sed: Не удаётся найти или открыть файл s/@Number@/npdsfg/g;.

sed: Не удаётся найти или открыть файл s/@Value@/SQR.

sed: Не удаётся найти или открыть файл #s/@Socket/semi_/g;.

решение1

Это не следствие перехода с системы на базе Linux на какую-то не-Linux-систему (AIX, случаем?). Это фундаментальное непонимание того, как оболочка анализирует и выполняет команды.

Вы не можете написать это и ожидать, что это запишет временную метку в файл:

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

Аналогично вы не можете написать это и заставить его выполнять замены и записывать результаты в выходной файл.

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

Перенаправление файла не может быть указано внутри переменной.

Я думаю, вы ищете sed -f, где можно создать файл замен и применить их к исходному файлу данных:

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

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

Файл преобразования может содержать такие операции:

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

Очевидно, вам придется подготовить это в контексте конкретной казни.

При наличии более подробных сведений в вашем вопросе это решение, возможно, можно будет усовершенствовать, но я надеюсь, что у вас достаточно информации, чтобы доработать его для вашего конкретного случая использования.

Связанный контент