Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены

У меня есть txt-файл со строковыми значениями в одном столбце:

File.txt

  • Rsync-каталог, отфильтровывающий файлы и сохраняющие края (например, имена w / hyphen (-) chars)
  • отображать пользователей, которые вошли в систему с даты, используя последние
  • awk - функция gensub
  • sed -e 's / ^ //' не работает для первой строки
  • Рекурсивно заменить строку в файлах
  • Как удалить текст из строки после определенного символа с помощью awk
  •  A B . . . Z 

    У меня есть sql скрипт с переменной, называемой 'parameter' .

    script.sql

     declare @var varchar(255) set @var = 'parameter' select * from table_name where column = @var go 

    Я хочу прочитать файл строки за строкой и использовать каждую строку для замены параметра в sql, распечатать все операторы sql в файле (и в конечном итоге запустить этот sql)

    Я открыт для использования perl или python , но простое решение оболочки было бы высоко оценено.

    Например, что-то вроде: cat file.txt |sed "s/parameter/$0/" script.sql

    Ожидаемый результат, например, для A и B :

    Новый файл

     declare @var varchar(255) set @var = 'A' select * from table_name where column = @var go declare @var varchar(255) set @var = 'B' select * from table_name where column = @var go 

  • найти и заменить строку в файле без использования временного файла с SED
  • Как скопировать строки разных файлов и вставить столбцы?
  • Имена файлов каталогов с sed с пробелами
  • Прочитайте столбец из файла и добавьте конкретный столбец другого файла
  • Различия между sed #,%, / и |
  • Непоследовательное поведение в awk
  • 2 Solutions collect form web for “Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены”

    Способ bash с ловушкой для вызова sed каждый раз (применяется штраф за исполнение):

     while read -r line;do sed -r "s/parameter/$line" script.sql >>newfile.sql done <file.txt 

    еще один способ:

     old="$(<script.sql)" while read -r ln;do echo "${old/parameter/$ln}" >>newfile.sql done <file.txt 

    Способ awk:

     awk 'NR==FNR{a[FNR]=$0;last=FNR;next}{for (i=1;i<=last;i++) \ print (a[i] ~ /^set @var/)?gensub(/parameter/,$0,"g",a[i]):a[i] >>"new.sql"}' script.sql file.txt 

    awk test онлайн здесь (нажмите кнопку выполнения над кодом)

     read -d '' -r SQL < script.sql while IFS= read -r par; do printf '%s\n' "${SQL/\'parameter\'/\'$par\'}"; done < File.txt 
    Linux и Unix - лучшая ОС в мире.