Удалите текст из файла и сохраните, не открывая

Я удаляю дублированные строки текста из нескольких файлов. Команда, которую я пытаюсь использовать, – это

sed -i 's/set autologout=10//g' /home/$x/.login 

Когда я запускаю его, я получаю эту ошибку

 sed: -I or -i may not be used with stdin 

Команда успешно запускается без опции -i однако она не сохраняет ее. Я создаю сценарий, поскольку я изменяю 2 файла на каждую учетную запись на каждом сервере. Я могу закодировать это с одним уродливым исключением, я не могу его сохранить.

2 Solutions collect form web for “Удалите текст из файла и сохраните, не открывая”

Что означает комментарий @ don_crissti, заключается в том, что для BSD sed требуется аргумент для -i , и если -e не используется, первый аргумент принимается как команда sed . Который не оставляет ни одного входного файла, по умолчанию для stdin , и вы не можете редактировать это «на месте».

Это в отличие от, скажем, GNU sed, у которого есть -i принимает необязательный аргумент .

Или, другими словами, ваш sed может интерпретировать s/set autologout=10//g как параметр для -i , расширение, которое будет использоваться для файла резервной копии. Поэтому, если вы не хотите оставить файл резервной копии, просто укажите параметр -i пустым аргументом:

 sed -i "" 's/set autologout=10//g' /home/$x/.login 

Для решения POSIX вы можете использовать Vim в режиме Ex:

 ex -sc '%s/set autologout=10//g|x' /home/"$x"/.login 
  1. % выбрать все строки

  2. | разделитель команд

  3. x записать в файл, если изменения были сделаны (они есть) и выйти

  4. "$x" плохо оставить переменную без кавычек в этом случае

  • вставка текста между двумя строками
  • Извлечение значений из блока данных
  • Команда SED не заменяет (работает регулярное выражение)
  • Удаление строк путем сопоставления только 3-го и 4-го символов
  • Sed Заменить в определенной группе позиций
  • добавить текст в строку перед матчем
  • Организация трехмерных данных с помощью awk / sed / perl
  • Текстовые манипуляции: извлеките все внутри скобок
  • Чтение заданных строк в файле - BASH
  • Найдите (и разделите) общие начальные пробелы из файла / трубы
  • Как работать с несколькими командами sed в aix?
  • Linux и Unix - лучшая ОС в мире.