LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 840|回复: 2

请问为什么sed替换命令不起作用?

[复制链接]
发表于 2007-1-25 22:43:31 | 显示全部楼层 |阅读模式
mcstart.dat文件内容如下:

0.381
148.2
0.340
28.0
5.0
0.3354
1.5820
38.2
1.264
303.0
-6.18
700
1.094
16.04



shell脚本部分代码如下:

    PORE_WIDTH_DIRECTORY=(0.3549 0.7098 1.0647 1.4196 1.7745 2.1294 2.4843
                          2.8392 3.1941 3.5490 3.9039 4.2588 4.6136 4.9686)

    CHEMICAL_POTENTIAL=(-23.11 -22.36 -21.81 -21.48 -21.24 -20.35 -19.66 -19.38
                        -17.80 -17.5 -16.95 -16.39 -16.06 -15.82 -15.64 -15.08
                        -14.52 -14.19 -13.95 -13.78 -13.03 -12.47 -12.14 -11.91
                        -11.02 -10.46 -10.04 -9.06 -8.5 -8.17 -7.61 -7.05
                        -6.72 -6.49 -6.31 -5.57 -5.19 -4.94 -4.74 -4.5)

    PRESSURE_DIRECTORY=(1.00e-08 2.50e-08 5.00e-08 7.50e-08 1.00e-07 3.00e-07 7.00e-07 1.00e-06
                        7.00e-06 1.00e-05 2.00e-05 4.00e-05 6.00e-05 8.00e-05 1.00e-04 2.00e-04
                        4.00e-04 6.00e-04 8.00e-04 1.00e-03 2.50e-03 5.00e-03 7.50e-03 1.00e-02
                        3.00e-02 6.00e-02 1.00e-01 3.33e-01 6.66e-01 1.00e+00 2.00e+00 4.00e+00
                        6.00e+00 8.00e+00 1.00e+01 2.50e+01 4.00e+01 5.50e+01 7.00e+01 9.50e+01)

。。。。。。
。。。。。。
。。。。。。

### copy initial files to the corresponding directories
    echo -ne "Initializing simulation startup files ........................\t"
    for i in ${PORE_WIDTH_DIRECTORY[@]}
    do
        k=0
        for j in ${PRESSURE_DIRECTORY[@]}
        do
            cd ~
            cp a.out result.dat mcstart.dat mcstep.dat $WORK_DIRECTORY/w_${i}nm/p_${j}kpa
            cd $WORK_DIRECTORY/w_${i}nm/p_${j}kpa
            a=`head -9 mcstart.dat | tail +9`
            b=`head -11 mcstart.dat | tail +11`
            mv mcstart.dat mcstart.dat.$$
            k=`expr $k + 1`
            sed -e 's/$a/${i}/g' -e 's/$b/${CHEMICAL_POTENTIAL[$k]}/g' mcstart.dat.$$ > mcstart.dat
            rm -rf mcstart.dat.$$
        done
    done
    echo "Done."


想替换原mcstart.dat里的第9和11行内的内容分别为对应的PORE_WIDTH_DIRECTORY和CHEMICAL_POTENTIAL条件,但是执行完上述该代码后,mcstart.dat没任何变换,为啥??
 楼主| 发表于 2007-1-26 11:12:51 | 显示全部楼层
如下命令中的 * 是否失去了其特殊含义?如果我想不让其失去特殊含义,该怎么修改?



  1. sed -e "9,9s/*/${i}/g" -e "11,11s/*/${CHEMICAL_POTENTIAL[$k]}/g" mcstart.dat.$$ > mcstart.dat

复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-26 14:14:49 | 显示全部楼层
regexp里面$是有特殊意义的。
我用awk来处理,而不是sed。

我也不知道sed如何获取shell里面定义的变量的值。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表