文本搜索
文本过滤
笔记内容要是文本格式的话,搜索可以用 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 关键词 {} \;