1 个不稳定版本

0.0.1 2023 年 9 月 9 日

#15 in #人类

MIT 许可证

53KB
1.5K SLoC

srch

为人类设计的文本搜索

Crate Docs

srch 是一个命令行工具,用于运行文本表达式并在命令行上执行基本文本操作,如过滤、忽略和替换。有许多出色的工具可以完成这项工作。但大多数其他工具有一个共同点:如果你不经常使用,它们很难记住。《code>srch 通过提供一种超级简单的 CLI 和表达式语言来解决此问题,这种语言易于记忆且文档完善。

快速入门

$ srch for 'equals "foobar"' -m word                # matches all occurences `foobar` in the text
$ srch for 'length 20'                              # matches all lines with 20 chars
$ srch not 'numeric or special'                     # ignores all lines which contain only numbers and special chars
$ srch replace 'numeric and length 5' 12345 -m word # replaces all 5 digit numbers with `12345`

srch 在可读性方面优于 grep 的常见任务

任务 srch grep
查找包含特定字符串的所有单词 srchfor 'contains "substr"' -m word grep-oh"\w*substr\w*"
查找具有特定长度的所有文件行 srchfor 'length 10' grep-x'.\{10\}'
忽略包含特定字符串的所有行 srch not'contains "hide me"' grep-v"hide me"
替换所有符合特定模式的单词 srch replace'numericand length5' 12345 -m word grep 本身无法替换,你需要使用 sed 来完成这项工作(这会更加复杂)。
将文件中的所有电子邮件地址替换为您的电子邮件地址 srch replace'contains "@"and contains".com"'your@email.com-m word 与上面相同。

何时使用其他工具

如前所述: srch 不是 grepawk 等的直接竞争对手!如果你发现自己达到了文本表达式语言的极限,你可能需要使用更高级的工具。

安装

目前 srch 可以通过使用 cargo 来安装

$ cargo install srch

文档

以下是一些全局选项

  • -m / --mode,设置操作模式,可以是 lineword,默认为 line

以下是一些全局标志

  • -f / --first`,如果有可用,则仅打印第一个匹配项
  • -l / --last`,如果有,则只打印最后一个匹配项
  • --skip n,跳过前n个匹配项
  • --limit n,最多显示n个匹配项
srch for [FLAGS] [OPTIONS] <EXPRESSION> [FILE]
srch not [FLAGS] [OPTIONS] <EXPRESSION> [FILE]
srch replace [FLAGS] [OPTIONS] <EXPRESSION> <REPLACEMENT> [FILE]

如果没有提供文件,srch将尝试从stdin读取。

示例

$ docker ps | srch for 'alphanumeric and length 12' -m word # prints all docker container ids

文本表达式语言

这是一种非常简单的格式,用于编写可读且易于记忆的文本处理表达式 - 虽然在命令行上处理文本有很多优秀且功能更强大的语言和工具,但它们都存在一个共同的问题 - 如果不经常使用,它们都是不可读且难以记忆的。

文本表达式语言只提供了9个属性用于查询。这些属性指示要测试的字符串的格式。

属性 如果测试的字符串
<str> 开始,则解析为true
ends<str> 以给定的字符串结束
contains<str> 包含等于给定字符串的子串
equals<str> 与给定的字符串完全相等
length<int> 具有给定的长度
numeric 只包含数字字符
alpha 只包含字母字符
alphanumeric 只包含字母数字字符
special 只包含特殊字符

目前只有两种二元逻辑运算:andor

运算符 布尔代数
and 合取
or 析取

属性可以通过逻辑运算符连接。

示例

starts "FOO" and ends "BAR"
contains "@" and contains ".com"
length 5 and length 10
numeric and length 8

限制

此语法可能无法覆盖所有用例。它并不打算这样做。如果您发现自己达到了这种语言的极限,您可能需要使用更高级的工具(如awk、grep、sed等)。

依赖关系

~1.5MB
~23K SLoC