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

时间:2010-04-29 06:20:48

标签: shell unix

如何用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 个答案:

答案 0 :(得分:0)

这不起作用的原因是因为你使用单个qoutes作为sed命令。

sed命令正在尝试将{strong>文字文字${text3}替换为${text2}。您想要的是将$text3替换为$text2的值。

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

另一个提示:如果您不需要临时文件,您也可以使用sed的-i选项来编辑文件。

希望这有帮助。

答案 1 :(得分:0)

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

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

这将为处理那些引用事项节省很多麻烦。