在批处理文件的循环内使用grep转义字符

时间:2015-01-29 16:09:37

标签: batch-file grep

我可以毫无问题地运行以下代码:

echo topic = "def";ghi | grep -oP "(?<=topic = \").+?(?=\"";ghi) 

但是如果我把它放在.bat文件中的for循环中,它就不再起作用了。

for /F "delims=" %%A in (urls.txt) do (
echo topic = "def";ghi | grep -oP "(?<=topic = \").+?(?=\"";ghi) 
)

错误说.+?(? was unexpected at this time

这是为什么?

1 个答案:

答案 0 :(得分:2)

这是因为)语句中的第一个grep正在关闭for代码块。您需要将整个grep参数包含在引号中,或者转义未使用插入符引用的任何括号。

for /F "delims=" %%A in (urls.txt) do (
    echo topic = "def";ghi | grep -oP "(?<=topic = \"^).+?^(?=\"";ghi^) 
)

我认为无论如何都是对的。它可能需要一些试验和错误。但是,只要您需要在批处理脚本中转义特殊字符,请使用^