regsub
我想搜索一个模式并在 TcL 中使用的行首插入一个字符。我只能使用 TcL
输入文件
mna1 x a1 vss vbn nch_svt_mac nfin=nfin_n1 l=ln1
mna2 x a2 vss vbn nch_svt_mac nfin=nfin_n2 l=ln2
mpa2 vdd a2 net10 vbp pch_mac nfin=nfin_p2 l=lp2
mpa1 net10 a1 x vbp pch_svt_mac nfin=nfin_p1 l=lp1
所需输出
mna1 x a1 vss vbn nch_svt_mac nfin=nfin_n1 l=ln1
mna2 x a2 vss vbn nch_svt_mac nfin=nfin_n2 l=ln2
*mpa2 vdd a2 net10 vbp pch_mac nfin=nfin_p2 l=lp2
mpa1 net10 a1 x vbp pch_svt_mac nfin=nfin_p1 l=lp1
使用的命令
regsub -nocase {pch_mac} $file_pointer {\*$1} file_pointer
答案1
如果您想在开始在该行中,您必须匹配该行开头的所有字符:
regsub {^.*pch_mac} $file_pointer {*&} file_pointer
这里,&
替换部分被替换为与表达式匹配的所有文本,即从行开头到“pch_mac”的所有字符。看http://tcl.tk/man/tcl8.6/TclCmd/regsub.htm
Perl 使用该$1
表示法,Tcl 使用\1
如果您使用捕获括号:
regsub {^(.*pch_mac)} $file_pointer {*\1} file_pointer
另一种写法是
if {[string first pch_mac $file_pointer] != -1} {
set file_pointer "*$file_pointer"
}