Решение для замены строки во всех скриптах - PullRequest
0 голосов
/ 21 декабря 2011

Мой сценарий заключается в замене строки ниже

/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 single liner.

find / -type f -name "*.ksh" -exec grep -H "/dboracle/orabase/product/10.2.0" '{}' \; -print 2>/dev/null

Дайте мне знать решение.

1 Ответ

0 голосов
/ 21 декабря 2011

Я на своем мобильном устройстве, поэтому у меня нет возможности проверить его, но это должно сработать -

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 должно быть в порядке.

...