尝试使用'sed -i'修改文件时出错

时间:2017-01-31 20:08:43

标签: unix sed

我的原始文件:

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

在第二种情况下,它不会替换完整的行,而只是附加我的替换文本。

知道我做错了吗?

谢谢!

1 个答案:

答案 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 '' ...