#line-numbers #grep #cli #utils #search-file #filename

app suln

suln 是一个 CLI,它使用 grep 打印行号周围的文本。

3 个版本

0.1.2 2022 年 10 月 2 日
0.1.1 2022 年 10 月 2 日
0.1.0 2022 年 10 月 2 日

#5#search-file

MIT 许可证

65KB
397

suln

suln 是一个 CLI,它使用 grep 打印行号周围的文本。

demo

使用方法

基本用法是

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 搜索多个键的示例。在 namebobage18 的地方搜索 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