Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在unix中用另一组行替换文件中的一组行?_Shell_Unix - Fatal编程技术网

Shell 如何在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

如何在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是我正在搜索的文件名。

这不起作用的原因是您对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是一样的