Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex \1未在RE中定义_Regex_Bash_Sed - Fatal编程技术网

Regex \1未在RE中定义

Regex \1未在RE中定义,regex,bash,sed,Regex,Bash,Sed,在我的脚本中,我正在传递一个标记文件并使用sed,我试图找到没有一个或多个#且不是空行的行,然后用标记将这些行包围起来 我的推理: ^[^#]+在行首,查找不以1或更多开头的行# \+然后查找包含一个或多个字符的行(也称为非空行) 然后将匹配行替换为\1,其中\1表示匹配行 但是,我得到“\1未在RE中定义”。我上面的推理正确吗?我如何纠正这个错误 BODY=$(sed -E 's/^[^#]+.\+/<p>\1</p>/g' "$1") BODY=$(sed-E's/

在我的脚本中,我正在传递一个标记文件并使用sed,我试图找到没有一个或多个#且不是空行的行,然后用
标记将这些行包围起来

我的推理:

^[^#]+
在行首,查找不以1或更多开头的行#

\+
然后查找包含一个或多个字符的行(也称为非空行)

然后将匹配行替换为
\1

,其中
\1
表示匹配行

但是,我得到“\1未在RE中定义”。我上面的推理正确吗?我如何纠正这个错误

BODY=$(sed -E 's/^[^#]+.\+/<p>\1</p>/g' "$1")
BODY=$(sed-E's/^[^#]+.\+/\1

/g''s$1)
后跟数字的反斜杠将替换为regexp中第n个捕获组的匹配项,但您的regexp没有捕获组

如果要替换整个匹配项,请使用
&

BODY=$(sed -E 's%^[^#].*%<p>&</p>%' "$1")
BODY=$(sed-E的%^[^#].%&

%'“$1”)
您不需要使用
+
来查找非空行,因为它的开头有一个字符与
#
不匹配,这意味着它不是空的。而且在
[^#]
之后不需要
+
——只需要第一个字符不是
。当regexp匹配整行时,您也不需要使用
g
修饰符——这只需要替换每行的多个匹配项


由于替换字符串包含
/
,因此需要对其进行转义或将分隔符更改为其他字符。

\1
指括号内的第一个匹配项,例如
()
。你没有这样的表达式。如果你想替换整个匹配项,请使用
&
好的,我试过了,但是我在替换命令中得到了
错误标志:'>
nvm解决了,我将除虫器改为
BODY=$(sed-E's%^[^#].%&

%g''1”)
你不需要
g
修饰符,因为每行只能匹配一次。分隔符问题与您最初提到的问题不同。