我的情况是替换下面的字符串

/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/

10-11 19:16
查看更多