TCL 脚本,用于查找脚本并在搜索到的带有数字的字符串之前添加新文本
TCL script to find a script and add new text before searched string with number
以下是我的输入文件的部分内容:
xyz
abc
MainContent(abc_dt) {
sc: it;
}
MainContent(xyz_cnt) {
sc : it;
}
MainContent(asd_zxc) {
sc : it;
}
在这里,我想搜索 "MainContent" 行并想在它之前添加新行...这个新行应该有 "Sb (text which is inside bracket in MainContent_1)"...这也应该添加左括号和右括号在下一个 Sb 出现之前:
脚本的预期输出:
xyz
abc
Sb(abc_dt_sb1) {
MainContent(abc_dt) {
sc: it;
}
}
Sb(xyz_cnt_sb2) {
MainContent(xyz_cnt) {
sc : it;
}
}
Sb(asd_zxc_sb3) {
MainContent(asd_zxc) {
sc : it;
}
}
有人可以帮我为此创建一个 TCL 脚本吗?
此代码将在标准输入上处理您的文本,并在标准输出上生成结果。根据需要重定向它。
set counter 0
set expectBrace false
while {[gets stdin line] >= 0} {
if {!$expectBrace && [regexp {^\s*MainContent\s*\((\w+)\)} $line -> bits]} {
puts [format "Sb(%s_sb%d) \{" $bits [incr counter]]
set expectBrace true
}
puts $line
if {$expectBrace && [regexp {^\s*\}\s*$} $line]} {
puts "\}"
set expectBrace false
}
}
使用正则表达式匹配小型状态机中状态变化的触发器(两个状态,由 expectBrace
控制)是非常传统的解析。我已经使用 format
对 Sb(…)
行进行了替换;这些很简单,如果您愿意,可以使用直接替换。
我没有做任何关于添加缩进的事情。
以下是我的输入文件的部分内容:
xyz
abc
MainContent(abc_dt) {
sc: it;
}
MainContent(xyz_cnt) {
sc : it;
}
MainContent(asd_zxc) {
sc : it;
}
在这里,我想搜索 "MainContent" 行并想在它之前添加新行...这个新行应该有 "Sb (text which is inside bracket in MainContent_1)"...这也应该添加左括号和右括号在下一个 Sb 出现之前:
脚本的预期输出:
xyz
abc
Sb(abc_dt_sb1) {
MainContent(abc_dt) {
sc: it;
}
}
Sb(xyz_cnt_sb2) {
MainContent(xyz_cnt) {
sc : it;
}
}
Sb(asd_zxc_sb3) {
MainContent(asd_zxc) {
sc : it;
}
}
有人可以帮我为此创建一个 TCL 脚本吗?
此代码将在标准输入上处理您的文本,并在标准输出上生成结果。根据需要重定向它。
set counter 0
set expectBrace false
while {[gets stdin line] >= 0} {
if {!$expectBrace && [regexp {^\s*MainContent\s*\((\w+)\)} $line -> bits]} {
puts [format "Sb(%s_sb%d) \{" $bits [incr counter]]
set expectBrace true
}
puts $line
if {$expectBrace && [regexp {^\s*\}\s*$} $line]} {
puts "\}"
set expectBrace false
}
}
使用正则表达式匹配小型状态机中状态变化的触发器(两个状态,由 expectBrace
控制)是非常传统的解析。我已经使用 format
对 Sb(…)
行进行了替换;这些很简单,如果您愿意,可以使用直接替换。
我没有做任何关于添加缩进的事情。