从主机中删除特定行

从主机中删除特定行

我想从hosts主目录中的文件中删除特定行:

~$ echo "193.10.1.1 localhost" >> hosts
~$ echo "127.0.0.1 localhost" >> hosts
~$ cat hosts
193.10.1.1 localhost
127.0.0.1 localhost
~$ sed '/127.0.0.1/d' hosts > hosts
~$ cat hosts

但文件是空的。如何删除匹配行,然后将结果打印回文件中?

答案1

如果在命令实际运行>之前使用 , 重定向输出,则文件会被截断。sed

北达科他州sed

使用sed -i .bak '/^127\.0\.0\.1[[:space:]]/d' hosts它来在线编辑文件、使用扩展名保存备份baksed -i '' [...]跳过备份创建。

GNUsed

使用sed -ibak '/^127\.0\.0\.1[[:space:]]/d' hosts它来在线编辑文件、使用扩展名保存备份baksed -i [...]跳过备份创建。


您也可以手动执行此操作,例如:

sed '/^127\.0\.0\.1[[:space:]]/d' hosts > hosts.new
cat hosts.new > hosts
rm hosts.new

虽然这又多一行mv hosts.new hosts,但它将保留文件元数据hosts

相关内容