Я пытаюсь удалить предложение case из bash-скрипта.Предложение будет отличаться, но всегда будет иметь обратную косую черту как часть строки соответствия регистра.
Я пробовал sed, но мог использовать однострочник awk или perl в скрипте bash.
Цель редактирования проста, напоминает:
$cat t.sh
case N in
a\.b);
#[..etc., varies]
;;
esac
Я сталкиваюсь с переменным расширением, избегая обратной косой черты, точки с запятой или обоих.Если я 'eval', я убираю свои побеги.Если я этого не сделаю, точки с запятой меня догонят.Так что я попробовал расширение subshell внутри sed.Это загрязняет переводчика, как я это написал.Дальнейшее спасение от точек с запятой, похоже, не поможет.
X='a\.b' ; Y=';;'
sed -i '/$(echo ${X} | sed -n 's/\\/\\\\/g')/,/$(echo ${Y} | sed -n s/\;/\\;/g')/d t.sh
И это:
perl -i.bak -ne 'print unless /${X}/ .. /{$Y}/' t.sh # which empties t.sh
и
eval perl -i.bak -ne \'print unless /${X}/ .. /{$Y}/' t.sh # which does nothing