我的情况是替换下面的字符串
/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
让我知道解决方案。
最佳答案
我在移动设备上,因此没有任何测试方法,但这应该可行-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
应该就可以了。关于linux - 在所有脚本中替换字符串的解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8586017/