在文件上使用粘贴命令并将结果保存到同一文件

时间:2019-02-20 02:37:55

标签: linux unix

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

paste -s -d, filename1

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

1 个答案:

答案 0 :(得分:1)

如果您确实要使用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)替换为,