在solaris sed中模式匹配后追加字符串

时间:2017-03-01 15:39:21

标签: shell unix awk sed nawk

我有一个包含以下内容的文件

hosts:      files
ipnodes:    files
networks:   files
protocols:  files
rpc:        files
ethers:     files
netmasks:   files

我需要在这两行的末尾添加“dns”

hosts:      files dns
ipnodes:    files dns

Solaris服务器,在sed中具有非常有限的选项 sed -i不可用 寻找解决方法

2 个答案:

答案 0 :(得分:2)

sed没有任何花哨的设置或就地更新将起作用:

sed 's/.*/& dns/' file

如果你需要对只有以hosts和ipnodes开头的行开头的行进行编辑,那么在命令中添加一个过滤器:

sed -e '/^hosts/ s/.*/& dns/' -e  '/^ipnodes/ s/.*/& dns/' file

注意:我假设您将输出重定向到新文件,并将其替换为旧文件。

答案 1 :(得分:0)

我很惊讶Solaris sed到底是多么微不足道。我会说在这种情况下使用awk,但似乎已经。我的建议是不要在Solaris上编写shell脚本。如果要使用shell脚本,请停止使用Solaris并将其替换为合理的操作系统。否则使用像Python这样的编程语言来编写脚本。

前一回答:

该命令应如下所示:

sed 's/^\(hosts\|ipnodes\).*/& dns/' file

在Solaris sed上,-i的参数是必需的(与GNU sed不同)

sed -i '.backup' 's/^\(hosts\|ipnodes\).*/& dns/' file

这将创建一个文件file.backup。检查man sed