如何用Bash将{任务编号}替换为带链接的Markdown格式?
嘿,这个需求用Bash里的sed命令就能轻松搞定!下面给你详细的实现方法和解释:
核心命令实现
直接用sed的正则捕获功能,就能把{任务编号}格式替换成你想要的链接格式,命令如下:
# 单条文本替换示例 echo 'TASK {5662}: Task definition' | sed -E 's/\{([0-9]{4,})\}/[\1](https://somelink.com/task/\1)/g'
执行这条命令后,输出结果就是:
TASK [5662](https://somelink.com/task/5662): Task definition
命令细节解释
让我拆解一下这个替换规则,帮你理解每部分的作用:
-E:启用扩展正则表达式模式,这样我们不用对括号等特殊字符额外转义,写起来更清爽s/原模式/替换模式/g:这是sed的替换语法,g表示全局替换(一行里多个匹配项都会被处理)\{([0-9]{4,})\}:匹配目标格式\{和\}:匹配左右大括号(因为大括号在正则里是特殊字符,所以要加反斜杠转义)([0-9]{4,}):这是一个捕获组,专门匹配4位及以上的数字([0-9]代表数字,{4,}表示至少出现4次)
[\1](https://somelink.com/task/\1):替换后的内容\1:引用刚才捕获组里的任务编号,相当于把匹配到的数字直接代入到链接里
进阶用法:处理多行文本或文件
如果要处理多行文本,或者直接修改文件内容,也很方便:
1. 处理多行文本
cat << EOF | sed -E 's/\{([0-9]{4,})\}/[\1](https://somelink.com/task/\1)/g' TASK {5662}: Task definition BUG {12345}: Fix login issue FEATURE {987654}: Add dark mode EOF
执行后会输出:
TASK [5662](https://somelink.com/task/5662): Task definition BUG [12345](https://somelink.com/task/12345): Fix login issue FEATURE [987654](https://somelink.com/task/987654): Add dark mode
2. 修改文件内容
如果要直接修改input.txt文件里的内容,可以用-i参数(会直接覆盖原文件):
sed -i -E 's/\{([0-9]{4,})\}/[\1](https://somelink.com/task/\1)/g' input.txt
如果你想备份原文件再修改,可以加.bak后缀,这样会生成一个input.txt.bak的备份文件:
sed -i.bak -E 's/\{([0-9]{4,})\}/[\1](https://somelink.com/task/\1)/g' input.txt
内容的提问来源于stack exchange,提问作者ykembayev
相关产品推荐
相关产品推荐

