如何为文件内容首尾添加Markdown代码块三重反引号?
解决方案
方法1:用printf(最简单直接)
如果多行内容存放在变量result里,直接用printf就能快速添加首尾的三重反引号:
printf '```\n%s\n```\n' "$result"
原理是直接在变量内容前后拼接三重反引号和换行符,完全避开特殊字符的转义问题。
方法2:用sed(解决特殊字符冲突)
如果一定要用sed,核心是用单引号包裹sed脚本,避免shell解析反引号:
echo "$result" | sed '1s/^/```/; $s/$/```/'
1s/^/```/:在第一行开头插入三重反引号$s/$/```/:在最后一行结尾插入三重反引号- 注意必须用
echo "$result"(带双引号),否则多行内容会被合并成单行
如果直接处理文件,使用带修改参数的sed命令:
sed -i '1s/^/```/; $s/$/```/' your_file.txt
问题根源
之前的sed命令失效,是因为反引号是shell的命令替换特殊字符。如果不用单引号包裹sed脚本,shell会把\```当成要执行的命令去解析,导致语法错误。用单引号包裹后,shell会将脚本内容原样传给sed,不会解析里面的特殊字符。
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

