Нет тривиального способа сделать это.Требуется грубая сила плюс некоторая осторожность:
sed -e 's/SKIII/SK3/' \
-e 's/SKII/SK2/' \
-e 's/SKIV/SK4/' \
-e 's/SKVIII/SK8/' \
-e 's/SKVII/SK7/' \
-e 's/SKVI/SK6/' \
-e 's/SKV/SK5/' \
-e 's/SKI/SK1/' "$@"
Как правило, более длинные последовательности должны предшествовать более коротким.И это касается только 1-8;обобщать это скромно сложно.
На самом деле нужны цифры от 1 до 29. Как с этим справиться?Тот же метод?
Если вы отказались от префикса SK, то с небольшой осторожностью вам не нужно 29 отдельных выражений -e
(хотя это, конечно, сработает).Этот скрипт доставит вас до 39 (проверено до 31, максимальное количество дней в месяце);Я полагаю, что расширения, необходимые для получения 99, довольно очевидны (я думаю, еще 13 -e
выражений).Обратите внимание на особый случай обработки чисел, содержащих нули.
sed \
-e 's/IX/9/' \
-e 's/XXX$/30/' \
-e 's/XXX/3/' \
-e 's/XX$/20/' \
-e 's/XX/2/' \
-e 's/X$/10/' \
-e 's/X/1/' \
-e 's/VIII/8/' \
-e 's/VII/7/' \
-e 's/III/3/' \
-e 's/II/2/' \
-e 's/IV/4/' \
-e 's/VI/6/' \
-e 's/V/5/' \
-e 's/I/1/' "$@"