我有一个巨大的文件,其中包含以下不同的字段:
ip server-ip-address = 20.29.77.10/22
tcp either-port = 80
我需要编写脚本将这些字段转换为以下格式。最有效的方法是什么?
remote-ip 20.29.77.10/22
remote-port eq 80
答案 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
在可用的情况下更快。
答案 2 :(得分:0)
最有效的方法是编写一个匹配整行的regexp命令,并将输入提取为一系列标记。你必须知道前面的所有令牌是什么,所以它们可以包含在regexp命令中,但是它基本上只有1个命令来执行整个解析操作。另一种方法是在整行上使用split命令并将“”作为第三个参数传递,然后使用foreach命令遍历每个字符串标记。