Если вы действительно хотите использовать команду 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
) на ,
.