我的方案是替换下面的字符串
/dboracle/orabase/product/10.2.0
到
/dboracle/orabase/product/11.2.0.2_org
Ksh包含以下值
export ORACLE_HOME="/dboracle/orabase/product/10.2.0"
export ORACLE_HOME="/dboracle/orabase/product/10.2.0_RDBMS"
export JAVA_HOME=/dboracle/orabase/product/10.2.0/jdk/bin
我应该单独更改第一行。 我不应该打扰第二和第三行。
使用find
,我将获取脚本列表并使用sed / awk
单线程命令进行更改。
find / -type f -name "*.ksh" -exec grep -H "/dboracle/orabase/product/10.2.0" '{}' \; -print 2>/dev/null
让我知道解决方案。
答案 0 :(得分:0)
我在我的移动设备上,所以没有任何方法可以测试它,但这应该有效 -
sed -i"bak" '/ORACLE_HOME/s/10\.2\.0"/11.2.0.2_org"/' file
<强>更新强>
好的,正如我所说的那样,上面的单行应该可行。您可以将其与find
语句一起使用,如下所示:
find /path/to/scripts -type f -name "*.ksh" -exec sed -i"bak" '/ORACLE_HOME/s/10\.2\.0"/11.2.0.2_org"/' {} \;
注意:只有在进行更改之前要备份脚本时才需要 -i"bak"
。这将为您的所有脚本创建两组文件,其中原始脚本正在修改并备份,并在其末尾添加bak
。如果您不想备份,则-i
应该没问题。