在我的脚本中,我正在传递一个markdown文件并使用sed,我正在尝试查找没有一个或多个#的行而不是空行,然后用<p></p>
包围这些行标签
我的推理:
^[^#]+
在行的开头,找到不以1或更多#
.\+
然后找到包含一个或多个字符的行(也就是非空行)
然后将匹配的行替换为<p>\1</p>
,其中\1
表示匹配的行。
然而,我得到“\ 1未在RE中定义”。我的推理是否正确,如何解决此错误?
BODY=$(sed -E 's/^[^#]+.\+/<p>\1</p>/g' "$1")
答案 0 :(得分:3)
反斜杠后跟一个数字将替换为正则表达式中第N个捕获组的匹配,但您的正则表达式没有捕获组。
如果您想要替换整场比赛,请使用&
:
BODY=$(sed -E 's%^[^#].*%<p>&</p>%' "$1")
您不需要使用.+
来查找非空行 - 事实上,它在开头有一个与#
不匹配的字符意味着&# 39;不是空的。在+
之后你不需要[^#]
- 所有你关心的是第一个角色不是#
。当正则表达式与整行相匹配时,您也不需要g
修饰符 - 只需要每行替换多个匹配项。
由于您的替换字符串包含/
,因此您需要将其转义或将分隔符更改为其他字符。