首页 > 解决方案 > 使用 sed 搜索降价

问题描述

问题

我在一个文件夹中有多个 Markdown 文件,格式如下...

# Cool Project
* Random Text 
* Other information
TODO: This is a task
TODO: This is another task

我写了一个脚本,从所有文件中提取所有以 TODO 开头的字符串......

 ag TODO: ~/myfolder/journal | sed  's/\(^.*:\)\(.*\)/TODO:\2 /g' | sed ''/TODO:/s//`printf "\033[35mTODO:\033[0m"`/'' | sed ''s/![a-zA-Z0-9]*/$(printf "\033[31;1m&\033[0m")/''

这给了我这样的输出

TODO: This is a task
TODO: This is another task

我想知道是否可以使用 sed 从模式向后看,以识别和拾取以开头的行/^# /并将其附加到字符串的末尾......像这样

TODO: This is a task # Cool Project
TODO: This is another task # Cool Project

标签: awksed

解决方案


使用 sed:

sed -n '/^#/h;/^TODO/{G;s/\n/ /p}' file

搜索以 # 开头的行并添加到保留空间 (h) 然后当一行以“TODO”开头时,将保留空间附加到模式空间 (G) 并用新行替换空格。


推荐阅读