14 个不稳定版本 (3 个重大更改)
0.4.5 | 2024 年 5 月 20 日 |
---|---|
0.4.4 |
|
0.4.1 | 2024 年 4 月 25 日 |
0.3.7 | 2024 年 4 月 17 日 |
0.1.3 | 2024 年 3 月 13 日 |
#293 in 命令行工具
每月 76 次下载
72KB
1K SLoC
ricat:基于 Rust 的 cat
命令实现
此项目是对经典 UNIX cat
命令的 Rust 重构,灵感来自 GNU Core Utilities 中的原始实现。它展示了 Rust 在系统工具开发中的强大和灵活性。
关于 ricat
ricat
设计时考虑了灵活性,使其成为命令行工具箱中的宝贵工具。其强大的功能之一是与管道操作符 |
无缝集成,允许用户将任何命令的输出直接传递给 ricat 进行进一步处理。这意味着您可以使用 ricat 实时查看、修改或扩展其他命令的输出。无论是添加行号、在每个行尾追加符号,还是利用 ricat 的其他功能,将 ricat 集成到您的命令行工作流程中可以显著提高您的生产力和命令行能力。
安装
请确保您的系统上已安装 Rust 和 Cargo。如果您没有安装 Rust,可以从 官方网站 安装。
您可以通过运行以下命令直接从 crates.io 安装 ricat
cargo install ricat
此命令安装了 ricat
二进制文件,使其在终端中可用
更新现有安装
如果您已经安装了 ricat
,您可以通过强制安装较新版本来更新它,覆盖旧版本
cargo install ricat --force
功能
- 行号:使用
-n
标志向输出添加行号。 - 美元符号追加:使用
-d
标志在每个行尾追加美元符号。 - 制表符替换:使用带有
-t
标志的命令替换制表符空格为^I
。 - 空行压缩:使用带有
-s
标志的命令将多个连续空行压缩为单个空行。 - 文本搜索:使用带有
--search
和--text
标志的命令搜索包含特定文本或正则表达式模式的行。- 支持不区分大小写的搜索,使用
--ignore-case
或-
标志。 - 对于正则表达式搜索,使用
reg:
后跟正则表达式。例如,ricat --search --text "reg:\\d+" my_file.txt
- 支持不区分大小写的搜索,使用
- Base64 编码:使用带有
--encode-base64
标志的命令使用 Base64 对输入文本进行编码。 - Base64 解码:使用带有
--decode-base64
标志的命令对 Base64 编码的文本进行解码。 - 多文件支持:将作为命令行参数指定的多个文件连接并处理。
- 标准输入处理:在没有文件参数提供的情况下从标准输入读取,允许
ricat
在命令管道中使用。 - 分页显示:使用
--pages
标志根据终端窗口大小分页显示输出。 - 预设:现在 Ricat 使用 ricat_cfg.toml 文件来存储功能的预设。您可以根据需要更改预设。它存储在 $HOME/.config/ricat/ricat_cfg.toml 中
这些功能使 ricat
成为一个多才多艺的文本处理和操作工具,提供了一系列功能,以增强您的命令行工作流程。
用法
读取不带行号的文件
ricat my_file.txt
读取启用行号的文件
ricat my_file.txt -n
读取每行末尾带有 $
符号的文件
ricat -d my_file.txt
读取多个文件
要读取和连接多个文件的内容,请指定每个文件路径,并用空格分隔
ricat file1.txt file2.txt file3.txt
在文件中搜索文本
要搜索文件中的文本,请使用 --search
标志,并使用 --text
标志指定要搜索的文本。
要搜索并返回包含特定模式或单词的单个文件中的行
ricat --search --text "string_to_search" my_file.txt
对于正则表达式搜索,确保模式是有效的正则表达式。例如,要查找包含数字的行
ricat --search --text "reg:\\d+" my_file.txt
要忽略大小写,请使用 --ignore-case
或 -
标志
ricat --search --text "string_to_search" --ignore-case my_file.txt
从用户标准输入读取
- 此行为允许
ricat
在命令管道中使用,其中它可以从前一个命令接收输入并将其输出传递给下一个命令。在没有参数的情况下,ricat
作为简单的文本编辑器,实时显示您输入的内容,这使得它可以直接从命令行创建短文本文件,方法是将输出重定向到文件,使用 > 操作符。
ricat
将来自另一个命令的输出管道传输到 ricat
df | ricat --search --text "/dev/nvme0"
此命令将显示驱动器 nvme0 所有分区的磁盘空间使用情况
Base64 编码-解码
ricat --encode-base64 message.txt
此命令将使用 base-64 编码
将 message.txt 的所有内容转换为编码
ricat --decode-base64 encoded_message.txt
此命令将使用 base-64 解码
将 encoded_message.txt 的内容转换为解码
echo -n "And" | base64 | ricat --decode-base64
编码和解码字符串 "And" 的示例
显示 ricat
当前实现的所有功能
ricat --help
配置预设
ricat 的配置文件存储在 $HOME/.config/ricat/ricat_cfg.toml 中。您可以在该文件中更改功能的预设。该文件在您首次运行 ricat 命令时创建。
默认设置
number_feature = false
dollar_sign_feature = false
tabs_feature = false
compress_empty_line_feature = false
基准测试
ricat
提供了基准测试脚本,以比较其性能与标准 cat
以及已安装的先前版本的 ricat
。
benchmark.sh
:比较单个运行中current:ricat、
cat
和prev:ricat 的执行时间,指定内存大小(默认:1GB)。
./benchmark.sh
benchmark_plot.sh
:在多个迭代(默认:10)中平均执行时间并绘制比较图。
./benchmark_plot.sh <memory_size_in_MB>
例如:./benchmark_plot.sh 4096
这些基准测试脚本利用内存映射 I/O,在读取大文件而不应用任何功能时提高性能。
测试 ricat
要测试 ricat
功能,您可以运行以下命令
./test-ricat.sh
在项目根目录中运行此命令
扩展 ricat
向 ricat
添加新功能很简单。为任何结构体实现 LineTextFeature
特性以创建新功能。例如,要添加一个突出显示文本文件中的 TODO 注释的功能,定义一个实现 LineTextFeature
的结构体,该结构体扫描每一行查找模式并应用所需的格式化。
待定
[x] 移除读取文件名输入时需要 -f
标志的需求
[x] 返回所有包含给定模式/单词的行。
[x] 功能:添加编码和解码能力(base64
)
[ ] 非UTF8 支持:待完成。见问题 #18
[ ] Stand-in replacement for cat.
贡献
欢迎贡献!如果您有新功能或改进的想法,请随时提交拉取请求或打开一个问题。
错误报告
要报告错误,您可以去 GitHub 讨论区
发行说明
0.4.5
- 错误修复:配置文件未正确读取。
0.4.3
- 增加了对 ricat_cfg.toml 文件中功能配置预设的支持。
- 增加了按
q
键退出分页模式的功能。 - 修复和改进。
- 更新了项目的文档。
0.4.2
- 增加了对内存映射 I/O 的支持,通过直接读取文件而不应用任何功能,提高了性能时间,几乎提高了 150%。
- 增加了对内存映射 I/O 添加的基准测试。
0.4.1
-
增加了用于测试
ricat
功能的自定义测试文件。 -
修复了
ricat
无法与标准输入模式一起工作的问题:[ #21 ]-- 要运行测试用例,请在项目的根目录中运行 ./test-ricat.sh。
0.4.0
- 更新了搜索使用正则表达式,现在您可以通过使用
reg:
前缀在文件中搜索正则表达式模式。 - 优化了性能,使用缓冲写入器进行输出,减少了写入输出时的系统调用。
- 通过缓存编译的正则表达式优化了正则表达式搜索,以前是每次搜索都进行编译。
- 重构代码以更容易理解和维护。
- 错误修复:修复了正则表达式搜索的问题。
0.3.3 到 0.3.6
- 增加了使用
--ignore-case
标志搜索文件中的文本/正则表达式的功能。 - 增加了以 base64 格式编码和解码的功能 [
--encode-base64
&--decode-base64
标志] - 错误修复:
ricat
在没有文件输入的情况下,在标准输入模式下没有应用功能。
0.3.2
- 添加了根据当前终端窗口大小进行分页的功能 [
--pages
标志]
0.3.0
- 添加了将多个文件合并到输出的功能。
- 添加了在文件中搜索文本/正则表达式的功能。
0.1.2 到 0.2.0
- 添加了在每个行末尾追加美元符号的功能。
- 实现了使用
^I
替换制表符空格。 - 将多个连续空行压缩成单个空行。
- 初始支持无文件输入的标准输入处理。
0.1.1
- 添加了为行编号的功能。
0.1.0
- 发布时带有从标准输入到标准输出的打印功能。
依赖项
~9–23MB
~286K SLoC