如何使用 regsub 在模式 tcl 之后获取值?

How to use regsub to grab values after a pattern tcl?

如果我有一个具有如下值的变量:

set var "/abc/def/ghi/jkl/mno/pqr"

如何使用 regsub 删除除倒数第二个值之外的所有内容 "mno"?

为什么是正则表达式? 怎么样:

set val [file tail [file dirname $var]]

参考文献:file

% regexp {.*/([^/]+)/} $var -> val
1
% set val
mno

试试这个,使用 splitlindex

% set var "/abc/def/ghi/jkl/mno/pqr"
/abc/def/ghi/jkl/mno/pqr
% 
% puts "[lindex [split $var "/"] end-1]"
mno

嗯,你可以这样做:

set updatedValue [regsub {^.*(mno).*$} $value {}]

这是 Unix 实用程序 sed 的一个老把戏,已翻译成 Tcl。这将删除除最后一个匹配 mno 的文本以外的所有内容。适当地选择你的 RE。

请不要用它来操纵文件名。它可能有效,但会使您的代码更加混乱。 file 命令具有用于此类工作的实用子命令,它们处理您可能不知道的棘手问题。