Используйте команду вставки в файл и сохраните результат в тот же файл - PullRequest
0 голосов
/ 20 февраля 2019

Обычно я изменяю возврат каретки в своем файле с помощью команды вставки, но я хотел бы сохранить результат в том же файле.

paste -s -d, filename1

Я не могу установить такие инструменты, как Sponge.

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы действительно хотите использовать команду paste, вам придется использовать такой подход, как этот, когда вы используете файл tmp и вы заменяете исходный (сделайте резервную копию вашего файла передделает это) :

XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ cat filename1 
abc
123
edf
xyz
XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ paste -s -d, filename1 > filename2 && mv filename2 filename1
XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ cat filename1 
abc,123,edf,xyz

Примечания: Операция перемещения будет иметь место, только если paste завершится без ошибки

Если вам разрешеночтобы использовать другие команды, такие как sed, вы можете использовать встроенный режим для непосредственного изменения файла без создания команды tmp.

XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ cat filename1 
abc
123
edf
xyz
XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ sed -i".bak" ':loop;N;$!bloop;s/\n/,/g' filename1 
XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ cat filename1
abc,123,edf,xyz
XXX@XXX:~/Downloads/fun_play/archive/filestosearch$ cat filename1.bak 
abc
123
edf
xyz

Примечания:

  • -i".bak" позволяют изменить файл и взять файл резервной копии на всякий случай, то же имя файла и суффикс.bak
  • ':loop;N;$!bloop;s/\n/,/g' создайте метку loop, добавьте каждую строку в буфер шаблонов, если она не достигает последней строки, go to метку loop, когда вы достигнете последней строки, которую вы заменяетевсе EOL (\n) на ,.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...