for循环中windows cmd中sed的转义正则表达式字符串

for循环中windows cmd中sed的转义正则表达式字符串,sed,cmd,escaping,Sed,Cmd,Escaping,我有一个sed命令,当它自己发出时,会准确地抓取它应该抓取的部分: sed -r -n 's/^.+new_ldap_user.+authenticity_token.+value="([^"]+).+/\1/p' response.html 到目前为止还不错。现在,当我尝试将这段代码放入FOR循环中,以将sed的结果存储在变量中时,我不知道如何正确地转义几个引号/括号 我所尝试的: FOR /F %i IN ('sed -r -n ^'s/^.+new_ldap_user.+authenti

我有一个
sed
命令,当它自己发出时,会准确地抓取它应该抓取的部分:

sed -r -n 's/^.+new_ldap_user.+authenticity_token.+value="([^"]+).+/\1/p' response.html
到目前为止还不错。现在,当我尝试将这段代码放入
FOR
循环中,以将
sed
的结果存储在变量中时,我不知道如何正确地转义几个引号/括号

我所尝试的:

FOR /F %i IN ('sed -r -n ^'s/^.+new_ldap_user.+authenticity_token.+value="([^"]+).+/\1/p^' response.html') DO set AUTH=%i
此时意外出现“.+/\1/p”

因此,在我看来,我还必须避开最后的括号:

FOR /F %i IN ('sed -r -n ^'s/^.+new_ldap_user.+authenticity_token.+value="([^"]+^).+/\1/p^' response.html') DO set AUTH=%i
此代码至少不会导致错误,但也不会导致正确设置
AUTH

我也尝试将
正则表达式中的所有插入符号
^
加倍,但没有成功


我需要如何正确地转义我的
sed
子命令才能将其结果存储在
AUTH
中?

有点棘手,因为插入符号在批处理文件本身中使用,后来又在sub cmd实例中使用

将命令存储到变量中并延迟扩展到子实例更容易,因此插入符号只需转义一次,括号不需要任何转义

@echo off

set "cmd=sed -r -n 's/^^.+new_ldap_user.+authenticity_token.+value="([^^"]+).+/\1/p' response.html"

FOR /F "delims=" %%i in ('"%%cmd%%"') DO (
    echo ## %%i
)
命令行上下文 这有点棘手,因为
%%cmd%%
的后期百分比扩展在这里不起作用

但是你可以用

FOR /F "delims=" %i in ('^"%^cmd%^"') DO echo %i

谢谢,当我将它放入
.bat
文件时,它的效果与预期一样。你知道我如何在交互式会话中运行它吗?我用
%%
替换了所有
%%
,但仍然得到了与以前相同的错误..效果非常好!Thx+1