Автор Тема: Как совладать с sed и awk если в тексте символ " ' "  (Прочитано 3550 раз)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
   Всем привет!

Нужно в файле для sql запроса заменить строку, в строке используется спец.символ " ' "
Пробовал оба варианта:
awk 'NR==8 {$0="  OPTIONS (user 'postgres', password 'postgres');"} { print }' file_name
 
sed -i '8s/.*/  OPTIONS (user 'postgres', password 'postgres');/g' file_name
На выходе исчезают символы " ' " что приводит к ругани во время sql запроса.
Пробовал экранировать их, ругается:
-bash: syntax error near unexpected token `)'Если экранирую и " ) " даёт приглашение:
>
Как-то можно решить?

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 534
Записать скрипт в файл и вызывать через sed -f.

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Записать скрипт в файл и вызывать через sed -f.
#!/bin/sh
set -x
sed -i '8s/.*/  OPTIONS (user 'postgres', password 'postgres');/g' file_name
sed: файл test.sh строка 3: незавершенная команда `s'
« Последнее редактирование: 29.12.2020 14:55:41 от zah »

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 145
    • Email
sed -i "8s/.*/  OPTIONS (user 'postgres', password 'postgres');/g" file_name
Сноси Винду, переходи на Линукс ! :)

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 534
Записать скрипт в файл и вызывать через sed -f.
#!/bin/sh
set -x
sed -i '8s/.*/  OPTIONS (user 'postgres', password 'postgres');/g' file_name
sed: файл test.sh строка 3: незавершенная команда `s'
Да нет. Возможно, я неправильно выразился. Под скриптом имеется в виду скрипт самого sed'а. Ну или команда, если так понятнее. То есть в файле должно быть только вот это:
8s/.*/  OPTIONS (user 'postgres', password 'postgres');/g
Далее этот файл дёргаем через sed -f.

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Вычитал что sed умеет работать с hex-16 и скормил спецсимволы этим методом - всё прошло успешно.