问题描述
使用Batch,我正在寻找一种方法来(1)搜索正则表达式模式和(2)在该模式中存储变量...这样我就可以在进行搜索和替换时使用这些变量。我一直在使用@dbenham(original REPL.BAT post和earliest StackOverflow post)创建的REPL.BAT。以下是该方案的一个示例。
我在文档中搜索以下代码的出现:
driver.find_element_by_id("username").send_keys("rwbyrd")
driver.find_element_by_id("password").send_keys("password")
并替换为...
login("rwbyrd","password")
使用以下批处理代码:
type %filename% | repl "sdriver.find_element_by_id(x22usernamex22).send_keys(x22rwbyrdx22)s*driver.find_element_by_id(x22passwordx22).send_keys(x22passwordx22)" "login(x22rwbyrdx22,x22passwordx22)" MX >%filename%.new
注意:x22=表示双引号的十六进制
我正在寻找一种方法来存储我要搜索的代码中的[Username]‘rwbyrd’和[Password]‘Password’值,并在进行替换时使用这些值。我希望在REPL.BAT命令中找到一种方法来实现这一点,但我将采用我能得到的:)。有人知道如何做到这一点吗?提前感谢!推荐答案
如果您尚未执行此操作,强烈建议您从命令提示符执行以下命令:
获取特定于REPL.BAT的帮助:
repl /?
获取有关REPL.BAT使用的JScript正则表达式的帮助(在Web浏览器中打开Microsoft文档)
repl /?regex
获取有关替换子匹配功能的帮助-您要查找的"变量"(在Web浏览器中打开Microsoft文档)
repl /?replace
我在您的搜索正则表达式中将前导s
替换为(单词边界)。我还使用未转义的圆括号来捕获用户名和密码值,以便在替换字符串中使用它们。
.*?
匹配括号文字中的内容(非贪婪匹配)。一项表面上的更改是使用q
而不是x22
。
type %filename% | repl "driver.find_element_by_id(qusernameq).send_keys((.*?))s*driver.find_element_by_id(qpasswordq).send_keys((.*?))" "login($1,$2)" MX >%filename%.new
更新
根据OP的评论和Aacini的回答,我已更新REPL.BAT以接受J选项,以将替换值指定为JScript表达式。
以下示例将用户名转换为大写:
type %filename% | repl "driver.find_element_by_id(qusernameq).send_keys((.*?))s*driver.find_element_by_id(qpasswordq).send_keys((.*?))" "'login('+$[1].toUpperCase()+','+$[2]+')'" MXJ >%filename%.new
有关详细信息和示例,请参阅http://www.dostips.com/forum/viewtopic.php?p=37855#p37855。