求类似onenote的笔记软件,不要国产不要云端

文本搜索

文本过滤

笔记内容要是文本格式的话,搜索可以用 egrep

构造出复杂的过滤器。

egrep 'ab' *.ipynb |  egrep -v '[0-9A-Za-z+/]{60,}' | egrep -v '"xml".*' | egrep -v '"id".*' | egrep -v '".*\.png":' | egrep -v '(!\[.*\])(.*)'

.ipynb 格式的文件中搜索 ab,由于关键词太短,肯定会遇到很多不相关的内容,可以使用 egrep -v 来反向搜索。

 -v, --invert-match        select non-matching lines

过滤选项的解释:

  • egrep -v '[0-9A-Za-z+/]{60,}',过滤 base64 字符串。

  • egrep -v '"xml".*' ,过滤 xml 附件(draw.io 图表附件)

  • egrep -v '"id".*',过滤 一些不相关的属性,笔记本的元数据。

  • egrep -v '".*\.png":',过滤图片名。

  • egrep -v '(!\[.*\])(.*),过滤类似 "![image.png](attachment:b1581d67-43d1-49ab-9681-ba7facdc4ffd.png)\n", 的图片名。

创建脚本

创建脚本,文件名 sk,意思是 search key

egrep "$1" *.ipynb \
      | egrep -v '[0-9A-Za-z+/]{60,}' \
      | egrep -v '"xml".*' \
      | egrep -v '"id".*' \
      | egrep -v '".*\.png":' \
      | egrep -v '(!\[.*\])(.*)'

将这个脚本放到某个合适的 bin 目录下,就可以使用 sk {关键词} 来搜索了。

配合 find 可以实现更强大的功能。

修改代码:

# 判断某个变题是否为空,https://stackoverflow.com/a/21407325/18193223
if [ ! -z "$2" ]
then
    # echo "$2",用 -H 选项显示文件名
    egrep -H "$1" "$2" \
          | egrep -v '[0-9A-Za-z+/]{60,}' \
          | egrep -v '"xml".*' \
          | egrep -v '"id".*' \
          | egrep -v '".*\.png":' \
          | egrep -v '(!\[.*\])(.*)'
    exit 0
else
    egrep -H "$1" *.ipynb \
          | egrep -v '[0-9A-Za-z+/]{60,}' \
          | egrep -v '"xml".*' \
          | egrep -v '"id".*' \
          | egrep -v '".*\.png":' \
          | egrep -v '(!\[.*\])(.*)'
fi

可以和 find 在一起用了。find . -name '00*.ipynb' -exec sk 关键词 {} \;