TCL代码转换文件

时间:2016-02-19 20:52:14

标签: tcl

我有一个巨大的文件,其中包含以下不同的字段:

ip server-ip-address = 20.29.77.10/22
tcp either-port = 80

我需要编写脚本将这些字段转换为以下格式。最有效的方法是什么?

remote-ip 20.29.77.10/22
remote-port eq 80

3 个答案:

答案 0 :(得分:1)

我建议最有效的方法是呼叫sed:

exec sed -i {
    s/^ip server-ip-address =/remote-ip/
    s/^tcp either-port =/remote-port eq/
} $filename

答案 1 :(得分:1)

Glenn Jackman的解决方案可以在缺少sed(未经测试的代码)的系统上实现:

package require fileutil

proc conv data {
    regsub -all -line {^ip server-ip-address =} $data remote-ip data
    regsub -all -line {^tcp either-port =} $data {remote-port eq}
}

::fileutil::updateInPlace $filename conv

我认为sed在可用的情况下更快。

文档:fileutil包,packageprocregsub

答案 2 :(得分:0)

最有效的方法是编写一个匹配整行的regexp命令,并将输入提取为一系列标记。你必须知道前面的所有令牌是什么,所以它们可以包含在regexp命令中,但是它基本上只有1个命令来执行整个解析操作。另一种方法是在整行上使用split命令并将“”作为第三个参数传递,然后使用foreach命令遍历每个字符串标记。