我的原始文件:
nameserver 123.23.23.12
nameserver 10.0.1.13
我想将其更改为:
nameserver 10.0.0.1
nameserver 10.0.1.13
我正在使用的命令:
sed -i 's/nameserver*/nameserver 10.0.0.1/g' resolve.conf
我收到错误:
sed: -i may not be used with stdin
另外,当我使用以下内容测试输出时:
sed 's/nameserver*/nameserver 10.0.0.1/g' resolve.conf
我明白了:
nameserver 10.0.0.1 123.23.23.12
在第二种情况下,它不会替换完整的行,而只是附加我的替换文本。
知道我做错了吗?
谢谢!
答案 0 :(得分:2)
sed 's/nameserver*/nameserver 10.0.0.1/g' resolve.conf
仅匹配nameserve
,后跟零次或多次r
次匹配 - 基本上只是nameserver
。
如果要替换nameserver
之后的所有内容,请使用以下模式:
sed 's/nameserver.*/nameserver 10.0.0.1/g' resolve.conf
但是这最终会替换你的resolv.conf中的两行。为什么不直接替换IP地址部分?
要仅替换第一个匹配项,您可以关注此帖:How to use sed to replace only the first occurrence in a file?
要解决sed -i
的问题,请将{length}选项传递给-i
选项,以便绕过创建备份文件:
sed -i '' ...