Unix 来自TCL变量的grep字符串

Unix 来自TCL变量的grep字符串,unix,grep,tcl,Unix,Grep,Tcl,我想从TCL变量中grep一个特定数量的字符串,并在我的工具命令中使用它。例如: ${tcl\u Var}-它包含类似于VEG\u 0\u 1/ABC的字符串 我想从上面的字符串开始grep,直到它到达第一个正斜杠,所以在上面的例子中,它将是VEG_0_1。然后在我的命令中替换它。例如: VEG_0_1/REST_命令 可以使用regsubTCL命令对正则表达式执行此操作。无需运行外部程序grep。请参见此处的更多信息: 如果您不熟悉正则表达式,请阅读有关它们的特定于TCL的教程。不要从grep

我想从TCL变量中grep一个特定数量的字符串,并在我的工具命令中使用它。例如:

${tcl\u Var}-它包含类似于VEG\u 0\u 1/ABC的字符串

我想从上面的字符串开始grep,直到它到达第一个正斜杠,所以在上面的例子中,它将是VEG_0_1。然后在我的命令中替换它。例如:

VEG_0_1/REST_命令


可以使用
regsub
TCL命令对正则表达式执行此操作。无需运行外部程序
grep
。请参见此处的更多信息:


如果您不熟悉正则表达式,请阅读有关它们的特定于TCL的教程。

不要从
grep
的角度思考,而是考虑“字符串操作”

使用
regsub
进行“搜索和替换:

% set tcl_Var VEG_0_1/ABC
VEG_0_1/ABC
% set newvar [regsub {/.+} $tcl_Var {/REST_OF_THE_COMMAND}]
VEG_0_1/REST_OF_THE_COMMAND
或者,您的问题可以通过在/上拆分字符串、获取第一个组件,然后附加“命令的其余部分”来解决:

或使用字符串索引:

% set newvar "[string range $tcl_Var 0 [string first / $tcl_Var]]REST_OF_THE_COMMAND"
VEG_0_1/REST_OF_THE_COMMAND

你,先生!一个救生员。这个解决办法很有效。
% set newvar "[string range $tcl_Var 0 [string first / $tcl_Var]]REST_OF_THE_COMMAND"
VEG_0_1/REST_OF_THE_COMMAND
set tcl_Var VEG_0_1/ABC  
set varlist [split $tcl_Var "/"]  
set newvar [lindex $varlist 0]/REST_OF_THE_COMMAND