2016-07-11 2 views
-2

мне интересно, как реализовать функцию, которая будет найти и заменить строку в моей Баш скрипт, например:Найти и заменить строку (из списка строки) в Баш скрипт

#!/bin/bash 
if [ $1 -eq 1 ] then 
ListToReplace="'Static_value as Column1','Static_value2' as Column2" 
Searching which query contain Column1, Column2 , then Somehow replace in queries... 
else 
do nothing. 
fi 

query="Select Column1, Column2 from dual" 
run query 
query2="Select Column3, Column1 from dual" 
run query2 

давайте предположим, что мы будем запускать скрипт с переменной 1, то query должен выглядеть:

Select 'Static_value' as Column1,'Static_value2' as Column2 from dual 

и query2:

Select Column3, Static_value as Column1 from dual 

с переменной 0 затем:

Select Column1,Column2 from dual 
Select Column3,Column1 from dual 

Какие-либо намеки? Благодаря

+2

Пожалуйста, исправьте форматирование и добавьте отсутствующие одинарные кавычки. – choroba

+0

Один намек; команда '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. –

ответ

1

Замена в bash довольно просто, хотя я не знаю, почему вам нужно/хочу список здесь:

#!/bin/bash 

query="Select Column1, Column2 from dual" 
query2="Select Column3, Column1 from dual" 

if [ "${1:-0}" -eq 1 ]; then 
    for VAR in query query2; do 
     VAL=${!VAR} 
     VAL=${VAL/Column1/Static_value as Column1} 
     VAL=${VAL/Column2/\'Static_value2\' as Column2} 
     eval $VAR=\$VAL 
    done 
fi 

echo run $query 
echo run $query2 

VAL=${!VAR} считывает значение переменной по имени. eval $VAR=\$VAL присваивает значение переменной по имени. (См. here for more.) Расширение ${//} выполняет замену внутри значения.

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