sed从一个文件中选择值,然后在另一个文件中替换

时间:2019-07-02 10:39:16

标签: string bash text sed replace

我正在尝试替换从另一个文件获取的值:

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

,然后在nginx配置中替换名称服务器IP:

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

但是我从sed中得到以下错误: sed: -e expression #1, char 2: unterminated的命令`

1 个答案:

答案 0 :(得分:2)

在黑暗中拍摄照片,因为我不知道您的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. 在文件更改前测试是否成功

编辑:现在需要GNU Awk:gensub动态保留前导空白,nextfile在拥有名称服务器后跳过当前文件