我需要一位sed大师的帮助。
我需要修改/etc/hosts
的内容,以便删除所有包含foo.bar
的行,但以127.0.0.1
开头的行除外。
我尝试使用sed -i '' "/127.0.0.1/p;/foo.bar/d"
,但是每次运行都会使127.0.0.1 localhost
行的数量增加一倍。
提供文件:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 console-dev.foo.bar
192.168.64.22 apiserver.foo.bar console.foo.bar
预期文件:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 console-dev.foo.bar
当前输出:
127.0.0.1 localhost
127.0.0.1 localhost
127.0.0.1 localhost
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 console-dev.foo.bar
任何愿意帮助的sed大师吗?
答案 0 :(得分:3)
如果一行不是以127.0.0.1
开头,而是包含foo.bar
,请 d 删除它。
sed '/^127\.0\.0\.1/!{/foo\.bar/d}' /etc/hosts
使用awk,您无需转义正则表达式有效的字符,这是更好的IMO。
awk '$1=="127.0.0.1"||!index($0,"foo.bar")' /etc/hosts
答案 1 :(得分:0)
如果一行加倍,则可以使用以下简单技巧获得唯一的一行:
... | sort | uniq