14 个不稳定版本 (3 个重大更改)

0.4.5 2024 年 5 月 20 日
0.4.4 2024 年 5 月 20 日
0.4.1 2024 年 4 月 25 日
0.3.7 2024 年 4 月 17 日
0.1.3 2024 年 3 月 13 日

#293 in 命令行工具

Download history 217/week @ 2024-04-19 53/week @ 2024-04-26 1/week @ 2024-05-03 541/week @ 2024-05-17 55/week @ 2024-05-24 1/week @ 2024-06-28 20/week @ 2024-07-05 70/week @ 2024-07-26 6/week @ 2024-08-02

每月 76 次下载

MIT 许可证

72KB
1K SLoC

Rust 811 SLoC // 0.0% comments Shell 258 SLoC // 0.2% comments

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:ricatcatprev: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