Expect 脚本:从 $argv 构建正则表达式字符串
Expect scripting: Constructing a regular expression string from $argv
我正在编写一个 expect 脚本来搜索以下格式的字符串:
([0-9]*)\) sign-([0-9]*)-X16-2019-11-04-dash.tar.xyz.abc
例如:
106) sign-496-X16-2019-11-04-dash.tar.xyz.abc
在 TUI 中并获取“)”之前的部分[通过 $expect_out(1,string)
变量]并将其发送到 TUI。
但是日期部分是可变的 [2019-11-04] & expect 脚本通过 $argv 获取它作为输入。
我一直在尝试找出正确的转义模式以正确连接字符串,以便正则表达式起作用。到目前为止我已经尝试过:
set inputStr [lindex $argv 0]
expect -re {([0-9]*)\) sign-([0-9]*)-X16-\"$inputStr\"-dash.tar.xyz.abc} {....}
和
set inputStr [lindex $argv 0]
expect -re {([0-9]*)\) sign-([0-9]*)-X16-{$inputStr}-dash.tar.xyz.abc} {....}
但这些与 TUI 中的任何字符串都不匹配。我做错了什么?
问题是您将 RE 括在大括号中,这会抑制所有替换。将 RE 括在大括号中通常是一件好事,因为它们通常包含反斜杠和方括号等,但这对您来说是个问题。修复它的最简单方法是使用 string map
:
添加您自己的替换
set inputStr [lindex $argv 0]
set RE {([0-9]*)\) sign-([0-9]*)-X16-\"%inputStr%\"-dash.tar.xyz.abc}
expect -re [string map [list "%inputStr% $inputStr] $RE] {....}
我正在编写一个 expect 脚本来搜索以下格式的字符串:
([0-9]*)\) sign-([0-9]*)-X16-2019-11-04-dash.tar.xyz.abc
例如:
106) sign-496-X16-2019-11-04-dash.tar.xyz.abc
在 TUI 中并获取“)”之前的部分[通过 $expect_out(1,string)
变量]并将其发送到 TUI。
但是日期部分是可变的 [2019-11-04] & expect 脚本通过 $argv 获取它作为输入。 我一直在尝试找出正确的转义模式以正确连接字符串,以便正则表达式起作用。到目前为止我已经尝试过:
set inputStr [lindex $argv 0]
expect -re {([0-9]*)\) sign-([0-9]*)-X16-\"$inputStr\"-dash.tar.xyz.abc} {....}
和
set inputStr [lindex $argv 0]
expect -re {([0-9]*)\) sign-([0-9]*)-X16-{$inputStr}-dash.tar.xyz.abc} {....}
但这些与 TUI 中的任何字符串都不匹配。我做错了什么?
问题是您将 RE 括在大括号中,这会抑制所有替换。将 RE 括在大括号中通常是一件好事,因为它们通常包含反斜杠和方括号等,但这对您来说是个问题。修复它的最简单方法是使用 string map
:
set inputStr [lindex $argv 0]
set RE {([0-9]*)\) sign-([0-9]*)-X16-\"%inputStr%\"-dash.tar.xyz.abc}
expect -re [string map [list "%inputStr% $inputStr] $RE] {....}