3 个版本 (1 个稳定版)
1.0.0 | 2021年3月3日 |
---|---|
0.2.0 | 2017年3月1日 |
0.1.0 | 2017年2月23日 |
#361 in 文本处理
每月 22 次下载
11KB
131 行
rewrite
快速入门
这是什么
rewrite
是一个简单的命令行工具,允许原地重写文件的内容,即使文件正在作为输入读取。这使得通过其他标准 Unix 工具转换文件内容变得非常简单,即使它们期望输入和输出文件/流在物理上分离。
问题
您有一系列链式操作/命令,该命令从给定的文件 file
读取,并希望用该命令链的结果替换 file
的内容。如果您尝试通过类似 > file
或甚至 | tee file
的方式重定向脚本的输出,您会发现您往往会丢失所有内容并损坏数据。这是因为上游命令正在从正在写入的同一文件中读取,用输出覆盖输入。
解决方案
rewrite
使您能够轻松解决此问题。只需将您的管道/工作流程的输出通过 rewrite file
管道,您就会得到您预期的结果。易如反掌!
示例
假设我们想要对一个文件进行排序。我们不想排序 文件的副本,我们想排序 文件本身(显然)。不幸的是,这并不容易。以下是一个示例,其中我们从一个词典文件中选择1024个随机单词,然后想要对输出进行排序。
shuf -n 1024 /usr/share/dict/words > words.txt
我们可以轻松地使用 sort
工具对列表进行排序,但当我们尝试将输出保存到自身时会发生什么?
sort words.txt > words.txt # don't do this!
这将导致数据完全丢失,因为外壳在 sort
有机会打开相同的文件进行读取之前就会设置输出文件句柄。最后,您既没有这个也没有那个,而且在整个过程中丢失了所有数据!
这就是您通常会做的事情
sort words.txt > temp
mv temp words.txt
这很简单,很直接,除非sort
是更大工作流程或脚本的一部分,或者你忘记了,或者temp
已经存在,或者你没有足够直接的情况,没有意识到你的源文件和目标文件是相同的。这时rewrite
就能派上用场了!
下面是如何简单使用rewrite
的示例
sort words.txt | rewrite words.txt
内部来说,rewrite
会执行所有“魔法”,从stdin
读取并缓冲内容,直到上游命令执行完成,然后相应地写入命名文件。
安装rewrite
rewrite
是用Rust编写的,旨在提高性能、安全性和开箱即用的跨平台支持。安装rewrite
(假设在你的平台和最喜欢的包管理器中还没有提供二进制文件)就像这样简单
cargo install rewrite
为Windows、Linux、FreeBSD和OS X提供预构建的二进制文件。欢迎在平台原生的包管理器上提供打包和分发支持。
依赖关系
截至版本1.0,rewrite
没有任何依赖关系(原生或其他)。
许可协议
rewrite
在MIT许可协议的条款下发布,不提供任何保证,希望对公众有用。rewrite
由Mahmoud Al-Qudsi编写,并由NeoSmart Technologies赞助。