1

Я хочу удалить конкретную строку из файла 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

Но файл emtpy. Как удалить строку и затем распечатать результат обратно в файл?

1 ответ1

4

Файл усекается, когда вы перенаправляете вывод, используя > , до того, как команда sed действительно запустится.

BSD sed

Вместо этого используйте sed -i .bak '/^127\.0\.0\.1[[:space:]]/d' hosts вместо того, чтобы редактировать встроенный файл, сохраняя резервную копию с расширением bak , или sed -i '' [...] чтобы пропустить создание резервной копии.

GNU sed

Вместо этого используйте 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .