Linux 在所有脚本中替换字符串的解决方案
我的方案是替换下面的字符串Linux 在所有脚本中替换字符串的解决方案,linux,bash,sed,awk,grep,Linux,Bash,Sed,Awk,Grep,我的方案是替换下面的字符串 /dboracle/orabase/product/10.2.0 到 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 我应该单独更改第一行我不应该
/dboracle/orabase/product/10.2.0
到
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
single-liner命令对其进行更改
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/“文件
更新:
好的,正如我所说的,上面的一个班轮应该可以工作。您可以将其与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
就可以了 用find and replace find/-typef-print0 | xargs-0sed-i/ORACLE|u HOME/s/10\.2\.0”/11.2.0.2_org”/g'我不太喜欢xargs
。但那只是我的偏好。只要你的替代品有效,这才是最重要的。:)另外,我注意到sed
语句中的g
。这是针对全局的
。如果您认为同一行中有多个表达式需要替换,那么您需要替换。如果您只有一行/行,那么您不需要g
。如果我还想更改第二行。它将是怎样的?对于这两行,这应该可以做到-sed'/ORACLE_HOME/s/10\.2\.0.*$/11.2.0.2_org/'
或者如果您更喜欢awk
,那么这应该可以做到-awk-F/'/ORACLE_HOME/{sub(/10.2.0.*$/,“11.2.0.2_org”);打印;下一步
find /path/to/scripts -type f -name "*.ksh" -exec sed -i"bak" '/ORACLE_HOME/s/10\.2\.0"/11.2.0.2_org"/' {} \;