У меня есть строка формы FOO_123_BAR.bazquux
, где FOO
и BAR
- фиксированные строки, 123
- число, а bazquux
- текст произвольной формы.
Мне нужно выполнить преобразование текста в этой строке: извлечь 123
и bazquux
, увеличить число и затем расположить их в другой строке. Например, FOO_123_BAR.bazquux
⇒ FOO=124 BAR=bazquux
. (Фактическое преобразование более сложное.)
Естественно, я могу сделать это в последовательности вызовов sed и expr, но это некрасиво:
shopt -s lastpipe
in=FOO_123_BAR.bazquux
echo "$in" | sed -r 's|^FOO_([0-9]+)_BAR\.(.+)$|\1 \2|' | read number text
out="FOO=$((number + 1)) BAR=$text"
Есть ли более мощный инструмент обработки текста что может сделать работу за один вызов? Если да, то как?
Редактировать: Прошу прощения за то, что не уточнил, но точная структура ввода и вывода является примером. Таким образом, я предпочитаю общие решения, которые работают с любыми разделителями или их отсутствие, а не решения, которые зависят, например, от наличия символов подчеркивания.