aL3*_*3xa 5 regex bash awk grep sed
我正试图用一些很酷的conky配置来重新组织我的桌面.因为我是Emacs中org-mode的忠实粉丝,所以我想从org文件中删除任务,在那里我保存我的日常任务并将其显示为conky.说我有这样的文件:
* first item
** subitem
** subitem
** subitem
* second item
** subitem
** subitem
* third item
** subitem
** subitem
** subitem
** subitem
Run Code Online (Sandbox Code Playgroud)
我想创建一个我的任务摘要,它将检查所有以任何开头的任务*并计算**之前的项目.然后我想以合适的方式提出这个问题:
* first item [3]
* second item [2]
* third item [4]
Run Code Online (Sandbox Code Playgroud)
虽然我能找到字符串的出现只有一个开头*有grep:
grep "^\\* " foo.org
Run Code Online (Sandbox Code Playgroud)
我可以计算出的次数**:
grep -c "^\\*\{2\}" foo.org
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到预期的效果?当然,可以使用Python或Ruby,但我只想坚持使用bash实用程序.
在您提供的示例文件中:
awk '!/^*/{next}$1=="*"{sub("\\*+ ","");p=$0}$1="**"{c[p]+=1}END{for(i in c) printf "* %s [%s]\n", i ,c[i]-1}'
Run Code Online (Sandbox Code Playgroud)
这将返回所需的输出。
* second item [2]
* first item [3]
* third item [4]
Run Code Online (Sandbox Code Playgroud)
如果需要排序,请将结果通过管道输入sort
awk command | sort -k2,2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |