首页 > 解决方案 > 在文件上使用粘贴命令并将结果保存到同一文件

问题描述

基本上我正在使用粘贴命令更改文件中的回车符,但我想将结果保存到同一个文件中。

paste -s -d, filename1

我无法安装 Sponge 之类的任何工具。

标签: linuxunix

解决方案


如果您真的想使用该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)替换为,.

推荐阅读