【发布时间】:2016-02-19 20:52:14
【问题描述】:
我有一个巨大的文件,其中包含不同的字段,如下所示:
ip server-ip-address = 20.29.77.10/22
tcp either-port = 80
我需要编写脚本将这些字段转换为以下格式。最有效的方法是什么?
remote-ip 20.29.77.10/22
remote-port eq 80
【问题讨论】:
标签: 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
【问题讨论】:
标签: tcl
我建议最有效的方法是调用 sed:
exec sed -i {
s/^ip server-ip-address =/remote-ip/
s/^tcp either-port =/remote-port eq/
} $filename
【讨论】:
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 在可用的情况下更快。
【讨论】:
最有效的方法是编写一个匹配整行的正则表达式命令,并将输入提取为一系列标记。您必须预先知道所有标记是什么,因此它们可以包含在 regexp 命令中,但基本上只需 1 个命令即可完成整个解析操作。另一种方法是在整行上使用 split 命令并将 " " 作为第三个参数传递,然后使用 foreach 命令遍历每个字符串标记。
【讨论】: