我想从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
它来在线编辑文件、使用扩展名保存备份bak
或sed -i '' [...]
跳过备份创建。
GNUsed
使用sed -ibak '/^127\.0\.0\.1[[:space:]]/d' hosts
它来在线编辑文件、使用扩展名保存备份bak
或sed -i [...]
跳过备份创建。
您也可以手动执行此操作,例如:
sed '/^127\.0\.0\.1[[:space:]]/d' hosts > hosts.new
cat hosts.new > hosts
rm hosts.new
虽然这又多一行mv hosts.new hosts
,但它将保留文件元数据hosts
。