替换到行首

替换到行首

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"
}

相关内容