使用sed在Markdown文件中重新格式化标头失败

时间:2017-03-26 20:37:06

标签: bash sed markdown

我尝试使用sed重新格式化markdown文件中的标题但不知何故似乎无法正常工作。 问题是标题#符号和标题文本之间需要是一个空格,否则它没有正确显示。

所以我尝试运行几种变体的sed命令,在#符号

之后添加这个空格
sed -i "s/<expression>/\1 /g" test.md

&LT;表达&GT;是:

  • ^\(\s*#+\)
  • ^\(\[#\]+\)
  • ^\(\[\#\]+\)

-i应该在文件中替换它,但是当我用cat test.md查看文件时,空间仍然缺失。我甚至在替代品的空间前面添加了反斜杠,但没有运气。

test.md的内容是以下示例数据:

#Heading 1
Some text
- a list entry
- another one
##Heading 2
text
##Heading 3

该命令应该导致例如第1行# Heading 1

我缺少什么?

2 个答案:

答案 0 :(得分:0)

升级到pandoc版本2后,可以自动插入ATX-style headers中新需要的空格,如下所示:

$ sed -i 's|\(^##*\)\([^# \.]\)|\1 \2|' test.md

说明

  • -i“原地”编辑降价文件。
  • s|…|…|是每行一次替换。
  • 每个\(…\)表示搜索表达式中的一部分。
  • \1\2分别指搜索表达式的第一部分,第二部分。
  • ^##*意味着该行应以一个哈希^开始#,然后是零个或多个哈希#*
  • 第二个搜索序列部分不应以哈希,空格或句点[^# \.]开头。

注意

说明中的最后一项是该答案的区别和更简单的sed -i 's|^##*|& |'。即使开始的哈希序列后面已经有空格,更简单的sed命令仍会插入空格。

答案 1 :(得分:-1)

您需要转义加号,例如:

^\(\s*#\+\)