代码之家  ›  专栏  ›  技术社区  ›  Arunachalam

在unix中,如何用另一组行替换文件中的一组行?

  •  0
  • Arunachalam  · 技术社区  · 15 年前

    在unix中,如何用另一组行替换文件中的一组行?

    #!/usr/bin/ksh
    export text1='log_file=$LOG_PATH${UNISON_JOB}".log"'
    export text2='\. \$\{env_path\}set_test_log_file\.ksh'
    export text3='log_file\=\$LOG_PATH\$\{UNISON_JOB\}\"\.log\"'
    
    echo $text1
    echo $text2
    echo $text3
    
    for file in `grep -il ${text1} SANDEEP`
    do
    sed 's/${text3}/${text2}/g' $file > /$file.tmp
    mv /$file.tmp $file
    echo $file
    done
    

    我试过上面的代码,但它不起作用。 它是kshell。这里sandeep是我正在搜索的文件名。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Bram    13 年前

    这不起作用的原因是,sed命令使用单个qout。

    sed命令试图替换 字面意义的 文本 ${text3} 具有 ${text2} . 你想要的是替换 价值 属于 $text3 价值 $text2 .

    为了在sed表达式中使用变量,需要使用双引号。

    另一个提示:如果您不需要临时文件,那么最好使用 -i 选项以就地编辑文件。

    希望这有帮助。

        2
  •  0
  •   user650749    12 年前

    对于带引号的sed,我喜欢将整个命令写入一个文件,然后执行此文件: 像这样的:

    echo "s/${text1}/${text2}/g" > a.sed
    sed -f a.sed < inputFile > tmp && mv tmp inputFile
    rm -f a.sed
    

    那就省去了很多处理报价的麻烦。