【问题标题】:append string after pattern match in solaris sed在 solaris sed 中的模式匹配后附加字符串
【发布时间】:2017-03-02 13:01:17
【问题描述】:

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

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 不可用 寻找解决方法

【问题讨论】:

标签: shell unix awk sed nawk


【解决方案1】:

sed 没有任何花哨的设置或适当的更新也可以工作:

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

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

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

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

【讨论】:

  • 我已经编辑了问题,文件中有更多行,需要将字符串附加到模式匹配旁边,sed 在 solaris 服务器中,-i 不可用
  • @judi 我已经更新了我的答案。而且,是的,我知道默认情况下 Solaris 上不提供 GNU 选项。
  • 非常感谢你----> sed -e '/^hosts/ s/.*/& dns/' -e '/^ipnodes/ s/。 */& dns/' 文件
【解决方案2】:

我很惊讶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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多