gpt4 book ai didi

bash - 使用 sed/awk 在启动时写入/etc/networking/interfaces?

转载 作者:行者123 更新时间:2023-12-04 18:55:16 24 4
gpt4 key购买 nike

新手来了

我正在尝试写入自动生成的 /etc/network/interfaces新配置的 XEN Ubuntu (12.04/10.04/8.04) DomU 服务器在启动时使用(当前)sed 的文件.

自动生成的文件格式如下:

自动 eth0
iface eth0 inet 静态
地址 192.168.0.88
网关 192.168.0.254
网络 255.255.255.255
自动lo
iface lo inet 环回

使用 sed ,我正在尝试更改第 1 行和第 2 行,添加第三行,删除网关和最后两行,并在最后附加四行。

我目前坚持添加第三行,因为脚本每次运行时都会添加这一行:

#!/bin/bash

sed -i "1s/.*/auto lo eth0/"/tmp/interfaces
sed -i "2s/.*/iface lo inet loopback/"/tmp/interfaces
sed -i "2a\iface eth0 inet static"/tmp/interfaces
sed -i "s/auto lo//g"/tmp/interfaces

是否可以使用 sed 仅在不存在的情况下添加第三行? (或 awk )?

同样,如果网关和最后两行不存在,我怎样才能删除它们?

我是 sed 的新手,所以我想知道我是否应该看awk而不是为了实现这一目标?

最佳答案

你可以用 sed 做到这一点:

sed -i -e '4{/iface eth0 inet static/! i\
iface eth0 inet static
}'

您可以使用大括号对命令进行分组。大括号中的命令只会在第三行执行。 i insert 命令只会在第三行执行 如果第三行与斜杠之间的字符串不匹配( ! 在它告诉它不匹配时执行之后)。

您可以执行相同的删除操作:
sed -i -e '3{/gateway/d}'

这里我们只删除包含字符串 gateway 的第三行。 .您可能会更通用,只需执行以下操作:
sed -i -e '/gateway/d'

这将删除所有包含网关的行,但这可能不是您想要的。

至于删除最后几行,最简单的解决方案是:
sed -i -e '${/auto lo/d;/iface lo inet loopback/d}'
sed -i -e '${/auto lo/d;/iface lo inet loopback/d}'
d如果匹配 auto lo,则在最后一行执行删除命令或 iface lo inet loopback .如果它们与模式匹配,则执行两次将删除最后两行。

如果要在文件末尾添加行,可以执行以下操作:
sed -i -e '$a\
newline1\
newline2\
newline3'

或者仅在最后一行不是特定行时才添加它们:
sed -i -e '${/192\.168\.1\.1/!a\
newline1\
newline2\
newline3
}'

希望这会有所帮助=)

关于bash - 使用 sed/awk 在启动时写入/etc/networking/interfaces?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12799047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com