String sed从一个文件中选取值并替换到另一个文件中
我正在尝试将一个文件中的值替换为另一个文件中的值:String sed从一个文件中选取值并替换到另一个文件中,string,bash,text,sed,replace,String,Bash,Text,Sed,Replace,我正在尝试将一个文件中的值替换为另一个文件中的值: { read -r val1 sed -i 's! nameserver .*; *$! nameserver '$val1';!;' testfile } < /etc/resolv.conf 但是,我从sed得到以下错误: sed:-e expression#1,char 2:unterminateds'command`在黑暗中拍摄,因为我不知道resolv.conf是如何配置的: gawk ' NR==FNR &
{ read -r val1
sed -i 's! nameserver .*; *$! nameserver '$val1';!;' testfile
} < /etc/resolv.conf
但是,我从sed得到以下错误:
sed:-e expression#1,char 2:unterminated
s'command`在黑暗中拍摄,因为我不知道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
编辑:现在需要GNU Awk:
gensub
来动态保留前导空格,nextfile
来跳过当前文件,一旦我们有了一个名称服务器测试文件中的示例数据就是上面的nginx配置。是的,我正在尝试从/etc/resolv.conf读取值(IP),并替换resolver之后的任何值(在上面的示例中是1.2.3.4)@SynRomana许多程序都可以访问/etc/resolv.conf;我们需要在您的计算机上查看它的结构才能正确回答这个问题。@vintnes我没有在/etc/resolv.conf中更改任何内容,我正在从中读取,它总是包含一行或多行包含nameserver 1.2.3.4
的内容,这些行完成了操作,但在解析程序之前删除了前导空格。@SynRomana请参阅编辑以获取更清晰的内容,但非POSIX解决方案。
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