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

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

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?
  • Инкрементная арифметика Sed
  • Почему sed так быстро?
  • `sed: -e выражение # 1, char 4: неизвестная команда:` но окончательные строки в порядке
  • Использовать awk, чтобы найти первое вхождение
  • Как перечислить определенные строки файла
  • Как добавить строку в первое поле вывода с помощью awk?
  • Заменить соответствующие круглые скобки с содержимым
  • Реализация расширенного регулярного выражения для добавления переменной числа ведущих нулей на основе позиции в строке
  • Можно ли изменить файл в директории только для чтения?
  • Замена IP-адреса на результат sed: sed: -e выражение # 1, char 57: Непревзойденный (или \ (
  • Linux и Unix - лучшая ОС в мире.