3 个版本
0.1.2 | 2022 年 10 月 2 日 |
---|---|
0.1.1 | 2022 年 10 月 2 日 |
0.1.0 | 2022 年 10 月 2 日 |
#5 在 #search-file
65KB
397 行
suln
suln
是一个 CLI,它使用 grep
打印行号周围的文本。
使用方法
基本用法是
grep -nH '<pattern>' '<file>' | suln <-B NUM | -A NUM | -C NUM>
使用 suln
和文件名以及行号与 grep
一起使用。并且 suln
为你提供了 grep
的延续。
例如,简单地使用文件名和行号进行 grep 搜索。
$ grep -Hn Usage README.adoc
README.adoc:7:== Usage
然后,添加 suln -A
(--after-context
)。 suln
输出中断的搜索结果的延续。
$ grep -Hn Usage README.adoc | suln -A 2
README.adoc:7:== Usage
README.adoc:8:
README.adoc:9:Basic usage is:
如果你想在文本之前搜索,请使用 -B
(--before-context
)。
$ grep -Hn Usage README.adoc | suln -B 2
README.adoc:5:`suln` is a CLI that prints surroundings of line number with `grep`.
README.adoc:6:
README.adoc:7:== Usage
如果你想在文本前后搜索,请使用 -C
(--context
)。
$ grep -Hn Usage README.adoc | suln -C 2
README.adoc:5:`suln` is a CLI that prints surroundings of line number with `grep`.
README.adoc:6:
README.adoc:7:== Usage
README.adoc:8:
README.adoc:9:Basic usage is:
这些选项与 grep
相同。
$ grep --help | grep -Eo '(-[ABC].+=NUM)'
-B, --before-context=NUM
-A, --after-context=NUM
-C, --context=NUM
用例:搜索 JSON 数据
这是一个在 JSON 中进行 AND 搜索多个键的示例。在 name
为 bob
且 age
为 18
的地方搜索 id
。仅使用 grep
是不可能做到这一点的。
$ grep -C 2 bob testdata/example.json
{
"id": 31,
"name": "bob",
"age": 18
},
--
{
"id": 334,
"name": "bob",
"age": 4
},
因为,当使用 age
进行搜索时,id
将会消失。
$ grep -HnC 2 bob testdata/example.json | grep 'age.*18'
"age": 18
如果你想要获取 id
,你必须使用许多命令。
$ grep -C 2 bob testdata/example.json | grep -Ev '^--$' | paste - - - - - | grep 'bob.*age.*18' | grep -Eo '"id[^,]+' '"' | awk '{print $2}'
31
或者,你必须编写复杂的 jq
查询。
⟩ jq -r '.[] | select(.name == "bob" and .age == 18) | .id' testdata/example.json
31
如果你想进行更直观的搜索,suln
非常有用。
$ grep -HnC 2 bob testdata/example.json | grep 'age.*18'
testdata/example.json-15- "age": 18
$ grep -HnC 2 bob testdata/example.json | grep 'age.*18' | suln -B 2
testdata/example.json:13: "id": 31,
testdata/example.json:14: "name": "bob",
testdata/example.json:15: "age": 18
⟩ grep -HnC 2 bob testdata/example.json | grep 'age.*18' | suln -B 2 | grep 'id.*31'
testdata/example.json:13: "id": 31,
安装
$ cargo install suln
或者,你可以从 GitHub 发布 下载并安装。
许可证
MIT
对于开发者
预先条件
- rustc 1.64.0 (a55dd71d5 2022-09-19)
构建
cargo build
测试
cargo test
依赖项
~3.5–5MB
~88K SLoC