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