如何将印象笔记导为markdown
如何将印象笔记导为markdown
由于想把自己多年的印象笔记里的技术笔记都转成markdown导出,但目前印象笔记不支持直接导出evernote,怎么办?google了一下,发现还没有直接导出的,只发现马克飞象可以直接绑定印象笔记和evernote国际版,绑定了以后可以直接在马克飞象上面写文章,然后同步到evernote上去,但是我需要的是把原来evernote上的笔记全部导出为markdown格式,目前evernote只支持导出为html和enex格式,看来只能从这里入手了。
一,将印象笔记中技术分类的笔记全部导出
我是mac电脑,安装的是印象笔记客户端,直接在文件–>导出笔记(格式选html),但是问题来了,导出的是批量的html,目前我们也没有看到有可以批量将html转成markdown的工具,所以就只能自己用脚本摸索一个了。
目前我知道的比较流行的将html转为markdown的工具有:
1.MarkdownRules.
这款工具将html转markdown是在线上的,美中不足的是,它不支持 < pre> 这类的标记
2.Pandoc.
这款工具是就非常强大了,它不公可以转html到markdown,还可以对markdown, reStructuredText, textile, HTML, DocBook, LaTeX, MediaWiki markup, TWiki markup, OPML, Emacs Org-Mode, Txt2Tags, Microsoft Word docx, LibreOffice ODT, EPUB, or Haddock markup 等十几种格式文档相互转换。但是,同样的,对< pre >标记的支持不足,mac用户可以通过home brew 进行安装
这是一款python写的工具,它相比前两款对< pre >标记解析有着更出色的表现,但也有些情况解析不了
我选择了pandoc对我的东西进行转换
二,Pandoc批量将html转为markdown
Pandoc真的是个好东西!能迅速在很多种文件格式之间转来转去!超级方便!转换速度超级快!超级漂亮!
然而我只用到了Markdown转html和markdown而已……
好像Pandoc并不支持批量转换啊,一直敲命令我也受不了。那就现学现卖写了个sh文件来玩。
#!/bin/sh
function ergodic(){
for fullname in `ls $1`
do
name=${fullname%.*}
ext=${fullname##*.}
if [ "$ext"x = "html"x ]
then
echo $name
pandoc $name.html -o $name.md
fi
done
}
IFS=$'\n'
INIT_PATH=".";
ergodic $INIT_PATH
想学bash编程,可以参考这里,有比较全的bash语法
如果只是想和我一样,想速学速用,那就看这里吧
逻辑是这样的:首先用ls命令找出文件夹下所有文件名,获取文件名部分和后缀名部分。如果后缀名为html,就让pandoc进行转换去。
其他的么……sh语法我也不会啊……
另外,这里是pandoc参考手册,如果需要转换成其他格式的话可以参考这里进行配置。
例如写成pandoc -f markdown -t docx $name.md -o $name.docx。默认就是markdown to docx
三,过滤转换出的markdown敏感内容
导出的md文件有以下两问题需要解决:
由于我的目的是要将导出的markdown都上传到我的博客上去,而转出的markdown内容总有些效果不是那么理想,所以如果有特殊符号标识的话,我的博客解析器解析不了,会出错的。
我的博客对md文件内容需要一些标记描述来作为分类、标签、标题等显示,格式是这样的:
---
title: 如何将印象笔记导为markdown
date: 2020-04-29
categories: 专业技术(印象笔记)
tags: 从印象笔记导入
---
我的解决方案是用sed工具
这个工具在linux和unix环境上的用法是有些差异的,稍后会说明
再次用bash解决:
#!/bin/sh
function ergodic(){
for fullname in `ls $1`
do
name=${fullname%.*}
ext=${fullname##*.}
if [ "$ext"x = "md"x ]
then
echo $name
# grep -o 输出匹配的字符串
#echo $name | grep -o [^][,_%$\“\ ]
lineStr="---"
title="title: $name"
dateStr="date: 2020-04-29"
categories="categories: 专业技术(印象笔记)"
tags="tags: 从印象笔记导入"
# titlePost="--- title: $name <br/> categories: 专业技术 印象笔记 tags: 从印象笔记导入 <br/> ---"
echo "categories is" $categories
# 在内容第一行前面插入文本
sed -i "" -e $'1 i\\\n'"$lineStr" $fullname
# 在内容第一行后面插入文本
sed -i "" -e $'1 a\\\n'"$title" $fullname
sed -i "" -e $'2 a\\\n'"$dateStr" $fullname
sed -i "" -e $'3 a\\\n'"$categories" $fullname
sed -i "" -e $'4 a\\\n'"$tags" $fullname
sed -i "" -e $'5 a\\\n'"$lineStr" $fullname
sed -i "" -e $'6 a\\\n'"# $name" $fullname
sed -i "" -e $'40 a\\\n'"<!--more-->" $fullname
fi
done
}
IFS=$'\n'
INIT_PATH=".";
ergodic $INIT_PATH
可能看了sed的使用语法后,发现我的写法跟语法不太一样,这是因为我是mac电脑,是unix内核,使用的时候不管是插入还是替换,都必须要在sed -i
后面加空“”
号和 -e $
,至于为什么,请参考这里
好了,新年要棒棒的,现在要开始找工作了。。。。。