你好,
由于最近几天在stackoverflow(很棒的资源!)上进行了大量搜索,我成功了,甚至在以下问题中也成功了,这是每次我运行命令时输出导致行数加倍。感谢能够删除双线的 awk 命令。我的搜索距离很远,但缺少 1 个选项。顺便说一下,同时使用 MacosX 和 linux。
我要做的是解析我的笔记(所有纯文本 .md 文件) ,在文本文件(称为 greplist.txt)中搜索单词/标签,并解析与同名的单独文本文件中的匹配行搜索词/标签(例如@computer.md)。
greplist.txt的内容选择有:
@home
@computer
@Next
@Waiting
2 个 .md 文件的示例内容:
学校.md:
* find lost schoolbooks @home
* do homework @computer
有趣的.md
* play videogame @computer
使用这个终端命令(效果很好,但还不完美)
$ cat greplist.txt | while read line; do grep -h "$line" *.md >> $line.md.tmp; mv $line.md.tmp $line.md; awk '!x[$0]++' < $line.md > $line.md.tmp && mv $line.md.tmp $line.md ;done
结果
@computer.md的结果:
* do homework @computer
* play videogame @computer
@home.md看起来像这样
* find lost schoolbooks @home
到目前为止太棒了!已经真的很高兴了。特别是由于添加了文件的移动/重命名,我还可以将额外的任务/行添加到 @ 标记 .md 文件中,并包含在文件中而不会在下次运行命令时被覆盖。很棒的蛋糕!
现在我唯一想念的是,我希望在任务后面的@标记.md文件的输出中,输出也列出搜索结果后面括号之间的文件名(不带扩展名)(以便nvalt可以使用它作为内部链接)
因此示例@computer.md的所需输出将变为:
* do homework @computer [[school]]
* play videogame @computer [[fun]]
我尝试在 grep 命令中使用 -l 和 -H 而不是 -h 来解决这个问题,但它的输出会以某种方式变得混乱。(甚至还没有尝试添加括号!)
我试过的另一个是这个,但它没有做任何它接缝的事情。然而,它确实说明了我想要完成的事情。
$ cat greplist.txt | while read line; do grep -h "$line" *.md | while read filename; do echo "$filename" >> $line.md.tmp; mv $line.md.tmp $line.md; awk '!x[$0]++' < $line.md > $line.md.tmp && mv $line.md.tmp $line.md ;done
所以百万津巴布韦美元的问题是:如何做到这一点。我试了又试,但这超出了我的技能水平。非常渴望找到解决方案!
提前致谢。
丹尼尔·丹尼斯·德维特