Shell 如何在unix中用另一组行替换文件中的一组行?
如何在unix中用另一组行替换文件中的一组行Shell 如何在unix中用另一组行替换文件中的一组行?,shell,unix,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 f
#!/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是我正在搜索的文件名。这不起作用的原因是您对sed命令使用了单个qoute sed命令试图用${text2}替换文本${text3}。您希望它将$text3的值替换为$text2的值 为了在sed表达式中使用变量,需要使用双引号 另一个提示:如果您不需要临时文件,那么最好使用sed的-i选项就地编辑该文件
希望这有帮助。对于带引号的sed,我喜欢将整个命令写入一个文件,然后执行此文件: 大概是这样的:
echo "s/${text1}/${text2}/g" > a.sed
sed -f a.sed < inputFile > tmp && mv tmp inputFile
rm -f a.sed
这将为处理这些报价问题节省很多麻烦。不清楚您想要实现什么目标。你能发布一个替换前后文件的例子吗?它没有替换任何东西。我只是试图找到text1并用text2替换text3。这里text1和text3是一样的