我是 shell 脚本的新手,现在使用 csh,假设我的配置文件中有这样一行:
127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444
我想要的只是为数组中的两个变量解析它:
2222 3333 4444
还有一个
127.0.0.1 127.0.0.2 127.0.0.3
我是 shell 脚本的新手,现在使用 csh,假设我的配置文件中有这样一行:
127.0.0.1:2222 127.0.0.2:3333 127.0.0.3:4444
我想要的只是为数组中的两个变量解析它:
2222 3333 4444
还有一个
127.0.0.1 127.0.0.2 127.0.0.3
阅读“ C Shell 编程被认为是有害的”。
如何在配置文件中获得正确的行?我将假设文件中只有一行,但只要你能识别出这一行,就有办法做到这一点。
set var1=`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`
set var2=`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`
第一个捕获点分十进制地址之后的“端口号”。第二个捕获地址。在每种情况下,结果都会分配给一个字符串,其中空格分隔值。
更多手动抨击(在 MacOS X 10.5.8 上 - 'man csh' 打印 'tcsh' 页面)表明您可能会追求:
set arr1=(`sed 's/[0-9.]*:\([0-9]*\)/\1/g' config.file`)
set arr2=(`sed 's/\([0-9.]*\):[0-9]*/\1/g' config.file`)
使用这种表示法(反引号 sed 命令周围的括号),您可以创建数组,并且可以使用:
echo $arr1[1]
echo $arr1[2]
echo $arr1[3]
echo $arr2[1]
echo $arr2[2]
echo $arr2[3]
(假设样本数据)。说明这一点的手册页部分用“(+)”标记了语法,这很可能意味着“对标准 C shell 的扩展”,因此这是否适合您可能取决于您的环境。