Bash 使用sed重新格式化标记文件中的标题失败

Bash 使用sed重新格式化标记文件中的标题失败,bash,sed,markdown,Bash,Sed,Markdown,我试图用sed重新格式化标记文件中的标题,但不知何故,这似乎不起作用。 问题是标题符号和标题文本之间需要有一个空格,否则无法正确显示 因此,我尝试运行几种不同的sed命令,在#符号后添加这个空格 该命令应产生例如第1行#标题1 我遗漏了什么?您需要避开加号,例如: ^\(\s*#\+\) 升级到pandocversion 2后,中新需要的空间可以自动插入,如下所示: $ sed -i 's|\(^##*\)\([^# \.]\)|\1 \2|' test.md 解释 -i编辑标记文件“就地

我试图用sed重新格式化标记文件中的标题,但不知何故,这似乎不起作用。 问题是标题符号和标题文本之间需要有一个空格,否则无法正确显示

因此,我尝试运行几种不同的sed命令,在#符号后添加这个空格

该命令应产生例如第1行
#标题1


我遗漏了什么?

您需要避开加号,例如:

^\(\s*#\+\)

升级到
pandoc
version 2后,中新需要的空间可以自动插入,如下所示:

$ sed -i 's|\(^##*\)\([^# \.]\)|\1 \2|' test.md
解释
  • -i
    编辑标记文件“就地”
  • s |…|…|
    是每行的单个替换
  • 每个
    \(…\)
    表示搜索表达式中的一部分
  • \1
    \2
    分别指搜索表达式的第一部分和第二部分
  • ^##*
    表示行应以一个哈希值
    ^
    开始,后跟零个或多个哈希值
    .*
  • 第二个搜索序列部分不应以哈希、空格或句点开头
    [^#\.]
笔记
解释中的最后一项是这一答案与更简单的
sed-i的^^ ^#*.&|
的区别。更简单的
sed
命令仍然会插入一个空格,即使在开始的散列序列后面已经有空格。
sed的/^#*/&/'
@jm666在ATX样式的头中已经存在所需的空格时也会插入空格。这可以通过@SergeStroobandt来防止。@yes,true.:)这是3年前的一个快速评论,用于帮助用户快速-通常他们不想在空间已经存在时修改文件。。。
^\(\s*#\+\)
$ sed -i 's|\(^##*\)\([^# \.]\)|\1 \2|' test.md