Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在所有脚本中替换字符串的解决方案_Linux_Bash_Sed_Awk_Grep - Fatal编程技术网

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"/' {} \;