行の先頭に置き換える

行の先頭に置き換える

regsubTcLを使用してパターンを検索し、行の先頭に文字を挿入したいと思います。 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"
}

おすすめ記事