sed - 在 FOR 循环中为 Windows cmd 中的 sed 转义正则表达式字符串
问题描述
我有一个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
推荐阅读
- mysql - 导入一系列包含一个字段的 .CSV 文件,同时在其他字段中添加额外的“已知”数据
- zeromq - 在客户端使用 ZAP 处理程序的 ZeroMQ 曲线断言
- objective-c - FatSecret API“无效签名”
- html - 正常和初始(css)之间有什么区别
- arrays - 如何将 AD 计算机名称传递给数组?
- html - 如何使用 CSS flexbox 调整背景和前景层的大小
- ruby-on-rails - 如何调用回调?
- javascript - 有条件地将类分配给 PrimeNG p-datatable 行组标题
- r - R download.file 下载没有图像的原始 html
- dotnetbrowser - 如何在 DotNetBrowser 中创建 JSArray?