Замените текст с sed, который имеет переменные - PullRequest
0 голосов
/ 29 июня 2011

У меня есть файл сценария

**************************************************
case $arg in

-start)

**./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@**

if test $? -ne 0 ; then

exit 1

fi

;;

-version)

./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config -i -v $@

if test $? -ne 0 ; then

exit 1

fi

;;

-configtest)

./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config -i -c $@

if test $? -ne 0 ; then

echo 'failure: configuration test failed'

exit 1

fi

echo 'success: configuration was parsed successfully'

;;

-shell)

/bin/sh

;;

*)

echo "Usage: start [-start|-shell|-version|-configtest]"

exit 1

;;

**********************************************

Я хочу заменить

"./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@" 

на

"newtask -p $Project_Name ./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@"

Я устал использовать sed, но этоне позволяет принимать переменные в качестве постоянных данных.Можете ли вы помочь мне здесь, я сошел с ума, связывая все виды вещей ...

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

sed -e 's|./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@|newtask -p $Project_Name ./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@|' scriptfile

0 голосов
/ 29 июня 2011

Вы хотите эту строку:

./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@

чтобы выглядеть так:

newtask -p $Project_Name ./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@

Верно? Тогда:

Просто используйте одинарные кавычки (') для переноса команды и канала (|) в качестве разделителя:

sed -i.bak 's|./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@|newtask -p $Project_Name ./$PRODUCT_BIN -d $PRODUCT_SUBDIR/config $@|' scriptfile
...