如何用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是我正在搜索的文件名。
答案 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
这将为处理那些引用事项节省很多麻烦。