1 个不稳定版本
0.0.1 | 2023 年 9 月 9 日 |
---|
#15 in #人类
53KB
1.5K SLoC
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
不是 grep
、 awk
等的直接竞争对手!如果你发现自己达到了文本表达式语言的极限,你可能需要使用更高级的工具。
安装
目前 srch
可以通过使用 cargo
来安装
$ cargo install srch
文档
以下是一些全局选项
-m
/--mode
,设置操作模式,可以是line
或word
,默认为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 |
只包含特殊字符 |
目前只有两种二元逻辑运算:and
和 or
运算符 | 布尔代数 |
---|---|
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