Col*_*lin 0 bash ubuntu awk sed
新手在这里,
我正在尝试/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 自动搜索 iface lo inet回送
使用sed
,我尝试更改第一行和第二行,添加第三行,删除网关,最后两行,最后添加四行。
我目前停留在添加第三行,因为脚本每次运行时都会添加此行:
#!/ 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
}'
Run Code Online (Sandbox Code Playgroud)
您可以使用大括号对命令进行分组。花括号中的命令仅在第三行执行。在i
INSERT命令将只执行第三行和如果第三行没有斜杠之间的字符串(匹配!
它告诉它来执行时,它不匹配后)。
您可以执行相同的操作来删除:
sed -i -e '3{/gateway/d}'
Run Code Online (Sandbox Code Playgroud)
在这里,仅当第三行包含字符串时,我们才删除它gateway
。您可能会更通用,只需执行以下操作:
sed -i -e '/gateway/d'
Run Code Online (Sandbox Code Playgroud)
这将删除所有包含网关的行,但这也许不是您想要的。
至于删除最后几行,最简单的解决方案是:
sed -i -e '${/auto lo/d;/iface lo inet loopback/d}'
sed -i -e '${/auto lo/d;/iface lo inet loopback/d}'
Run Code Online (Sandbox Code Playgroud)
如果d
delete命令与auto lo
或匹配,则在最后一行执行delete命令iface lo inet loopback
。如果执行两次,则如果它们匹配模式,则将删除最后两行。
如果要在文件末尾添加行,则可以执行以下操作:
sed -i -e '$a\
newline1\
newline2\
newline3'
Run Code Online (Sandbox Code Playgroud)
或者,仅在最后一行不是特定行时才添加它们:
sed -i -e '${/192\.168\.1\.1/!a\
newline1\
newline2\
newline3
}'
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助=)
归档时间: |
|
查看次数: |
2131 次 |
最近记录: |