在没有临时文件的情况下将重定向输出到同一文件

时间:2016-08-23 09:42:12

标签: linux shell unix command-line

假设我有一个制表符分隔的数据文件。我想将文件中的每个标签转换为单个空格字符。

$ cat junk
John Doe    35  New York
Bob Smith   24  Boston
Jane Doe    31  Los Angeles

为此,我可以使用expand命令。如果我这样做:

$ expand -t 1 junk > junk

它会破坏垃圾文件,所有数据都将丢失。当然,最简单的解决方案是将输出重定向到临时文件,然后将输出从临时文件重定向回原始文件。这看起来像这样:

$ expand -t 1 junk > temp
$ cat temp > junk
$ rm temp
$ cat junk
John Doe 35 New York
Bob Smith 24 Boston
Jane Doe 31 Los Angeles

我认为这太麻烦了。也许有一种更简单的方法可以用来一次完成整个事情?

1 个答案:

答案 0 :(得分:2)

如果您有GNU sed(问题标记为linux,可能就是这种情况),您可以使用其-i--in-place选项删除其临时文件(除非您提供备份后缀。)

使用s(替换)命令将每个选项卡替换为空格; g(全局)修饰符替换正在处理的行上的所有制表符,即不仅仅是第一个制表符:

sed -i 's/\t/ /g' junk