sed, чтобы выбрать значение из одного файла и заменить в другом - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь заменить значение, взятое из одного файла в другом:

{ read -r val1
  sed -i 's! nameserver .*; *$! nameserver '$val1';!;' testfile 
} < /etc/resolv.conf

, а затем заменить IP-адрес сервера имен в конфигурации nginx:

server {
  location {
    resolver 1.2.3.4 valid=60s;
    resolver_timeout 10s;
    }

Однако я получаю следующееошибка от sed: sed: -e expression #1, char 2: unterminated s 'command`

1 Ответ

2 голосов
/ 02 июля 2019

Сделав снимок в темноте, поскольку я не знаю, как настроен ваш resolv.conf:

gawk '
  NR==FNR && $1=="nameserver" {if(ns=$2) nextfile}                    #1
  NR!=FNR && $1=="resolver"   {print gensub(/[^ ]+/, ns, 2); next}    #2
  NR!=FNR                                                             #3
' /etc/resolv.conf testfile > tmp && mv tmp testfile                  #4
  1. собрать сервер имен из первого файла
  2. вставить собранный сервер имен,сохранение начальных пробелов
  3. печать измененного второго файла
  4. проверка на успешность до изменения файла

edit: теперь требуется GNU Awk: gensub для динамического сохранения начальных пробелов,nextfile чтобы пропустить текущий файл, когда у нас есть сервер имен

...