for循环中windows cmd中sed的转义regex字符串



我有一个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

我也尝试将regex中的所有插入符号^加倍,但没有成功。

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

有点棘手,因为插入符号在批处理文件本身中使用,稍后在子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

相关内容

  • 没有找到相关文章

最新更新