DisplayName
DisplayName

Reputation: 649

sed to pick value from one file and replace in another

I am trying to replace a value taken from one file in another:

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

and then replace nameserver IP in the nginx config:

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

However I am getting following error from sed: sed: -e expression #1, char 2: unterminateds' command`

Upvotes: 1

Views: 84

Answers (1)

vintnes
vintnes

Reputation: 2030

Taking a shot in the dark as I don't know how your resolv.conf is configured:

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. collect nameserver from first file
  2. insert collected nameserver, preserving leading whitespace
  3. print modified second file
  4. test for success before file change

edit: Now requires GNU Awk: gensub to dynamically preserve leading whitespace, nextfile to skip current file once we have a nameserver

Upvotes: 2

Related Questions