Использование sed в сценарии ksh с условием

Я использую команду sed для замены некоторых слов в текстовых файлах. Эта команда встроена в сценарий ksh. Я хотел бы достичь того, что не каждый раз будет выполняться каждое правило замены sed fire, только если будут выполнены некоторые условия. Например. в зависимости от значения переменной оболочки.

Другими словами, я хотел бы написать этот скрипт без оператора if, я бы предпочел включить условное выражение внутри sed. Является ли это возможным?

REPLACE_A=TRUE

if [ "$REPLACE_A" = "TRUE" ]
then
    cat myfile \
    | sed 's/A/B/g;
          's/C/D/g;
          's/E/F/g;'
else
    cat myfile \
    | sed 's/C/D/g;
          's/E/F/g;'    
fi

person Attila Zobolyak    schedule 04.07.2011    source источник
comment
Я не думаю, что можно применить такое условие внутри sed, но я могу ошибаться.   -  person EdoDodo    schedule 04.07.2011
comment
Я согласен с @EdoDodo - я не думаю, что это возможно: sed - прекрасный потоковый редактор, но не выполняет условные операторы. И почему вы хотите сделать свой ksh скрипт менее читаемым.   -  person pavium    schedule 04.07.2011
comment
У меня очень длинный список слов для замены. Я просто не хочу перечислять их несколько раз, если нужно применить новое условие.   -  person Attila Zobolyak    schedule 04.07.2011


Ответы (2)


Единственное решение, которое приходит мне в голову, это сохранить команду sed в переменной, например

# in your script
SEDCMD=""
# ...
SEDCMD="s/A/B/g;"
# later 
SEDCMD="${SEDCMD}s/C/D/g;"
# ...
# finally
sed "$SEDCMD" FILE

Но это все еще не решение, которое вы хотите.

person Zsolt Botykai    schedule 04.07.2011
comment
Это не совсем то, что я хотел, но это меня устраивает. Спасибо! - person Attila Zobolyak; 04.07.2011

Вы не можете сделать это с sed, но с awk. Если вы хотите попробовать, я предлагаю вам взглянуть на это:

http://www.grymoire.com/Unix/Awk.html

person Nodebody    schedule 04.07.2011