2011-12-21 3 views
0

Мой сценарий должен заменить НИЖЕ снабжать струной, тетивой и т.п.решение для замены строки во всех сценариях

/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 

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

ответ

0

Я нахожусь на своем мобильном устройстве, так что не имеют какой-либо способ тестирования, но это должно работать -

sed -i"bak" '/ORACLE_HOME/s/10\.2\.0"/11.2.0.2_org"/' file

Update:

Хорошо, так как я сказал , вышеуказанный однострочный лайнер должен работать. Вы можете использовать его с 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 должно быть прекрасно.

+0

Как насчет этого с поиском и заменой find/-type f -print0 | xargs -0 sed -i /ORACLE_HOME/s/10\.2\.0"/11.2.0.2_org"/g ' – AruM

+0

Я не слишком люблю «xargs». Но это только мои предпочтения. Пока ваша замена работает, что имеет значение. :) Кроме того, я заметил 'g' в' sed'. Это для «глобального». Если вы считаете, что в одной строке есть несколько выражений, которые нужно заменить, вам это нужно. Если у вас есть только одна строка, вам не нужно 'g'. –

+0

Если я хочу изменить вторую строчку. как это будет? – AruM

Смежные вопросы