在所有脚本中替换字符串的解决方案

时间:2011-12-21 06:44:42

标签: linux bash sed awk grep

我的方案是替换下面的字符串

/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

让我知道解决方案。

1 个答案:

答案 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应该没问题。