Исходная строка (в соответствии с форматом мой)Удалить конкретный шаблон из строки в оболочке
"CF Foo -J 12345 -z -macro TEST_IFDEFINE -macro ЭТО -macro THIS1 -macro THIS2"
для того, чтобы передать его другому сценарию, я пытаюсь изменить его в
"сравни Foo -J 12345 -z"
Для достижения этой цели я написал скрипт следующим образом:
string="cf foo -J 12345 -z -macro TEST_IFDEFINE -macro THIS -macro THIS1 -macro THIS2"
done=0
config="-cf"
name=""
for name in $string
do
if [ $done -eq 1 ];then
string=`echo $string | sed s/"-macro"//g`
string=`echo $string | sed s/"$name"//g`
echo "----->name: $name"
macro_name="$macro_name -d $name"
done=0
echo "----->string: $string"
fi
if [ "$name" = "-macro" ];then
done=1
macro_def=1
fi
done
Из этого кода я получаю результат:
сравни Foo -J 12345 -z 1 2
Здесь $ name содержит THIS1 и THIS2. Но в сценарии, когда я делаю
| SeD с/"$ имя" // G`
удаляет только
'ЭТО'
Но держать
наряду с оригинальной строкой. Это означает, что скрипт отбрасывает только алфавиты, а не числовые значения в $ name. Предложите мне что-то достичь.
Какова логика в чистке струны? Сохраните первые 5 слов? Все до макроса? – fedorqui
Нет ... логика удаляет строку «-macro» и сопровождается именем макроса. В этом случае это «-macro THIS -macro THIS1 -macro THIS2» – ziga