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

Один из способов может быть следующим:

sed -e '
   /\n/s/\(.*\)\(\n\)\(.*\)/\3\2\1/;//b
   $!N;$q;N;                            # load up the pattern space with 3 lines provided eof not reached
   P;D;                                 # first just print the first line then interchange the two and print them
' yourfile

В качестве альтернативы,

perl -ne 'print $_, reverse scalar <>, scalar <>' yourfile

Результаты

gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
0
14.03.2017, 21:10
2 ответа

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

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

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

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

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

1
28.01.2020, 02:25

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

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

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

sed -i "" 's/set autologout=10//g' /home/$x/.login
3
28.01.2020, 02:25

Теги

Похожие вопросы