如何使用 sed 替换动态内容可能包含单/双引号的模式?

如何使用 sed 替换动态内容可能包含单/双引号的模式?

我正在尝试为我的 Markdown 文件动态生成目录,并尝试将其添加到我的 Markdown 文件的开头。

但是动态生成的TOC可能包含一些单引号或双引号,这会导致sed执行失败。

有没有办法可以使用 sed 将这些动态生成的 TOC 添加到文件的开头?如何?

以下是我的脚本和错误信息:

# filename: add_toc.sh
TOC=$(./gh-md-toc $1)
sed -i "1s/^/"$TOC"/" $1


# Execution 
./add_toc.sh my_doc.md
sed: -e expression #1, char 5: unterminated `s' command

答案1

我建议使用ed而不是sed, 及其命令!的形式r将 TOC 生成器命令的输出作为文本读取到文件中,而不可能被解释。

前任。 (未经测试 - 因为我没有脚本./gh-md-toc):

ed -s "$1" <<EOF
0r !./gh-md-toc "$1"
wq
EOF

相关内容