sed 's/…/…': Можно ли сохранять подвыражения для последующего использования?

предположим, что у меня есть что-то вроде этого:

echo "bLah BLaH blAH" | sed -r 's/([a-zA-Z ]+)/\L&; s/[a-z]/\u&/g'

Довольно типичное используйте для sed, чтобы преобразовать строку «сумасшедшего регистра» в смешанный регистр (первая буква прописная, остальные буквы строчные)

Однако это всегда повлияет на ВСЮ строку. имена файлов mp3 в разных вариантах ($tracknr - $artist - $title против $artist - $tracknr - $title) все становится намного сложнее, потому что иногда заголовки на иностранных языках, таких как французский, а смешанный регистр просто выглядит УЖАСНО на французском или итальянский. Вот почему я хочу продолжать только до тех пор, пока не будет достигнут какой-то разделитель, например, пробел-тире-пробел.

Следовательно, я хотел бы использовать комбинированные выражения 's/.../...', чтобы делать что-то шаг за шагом.Однако было бы неплохо иметь способ «сохранять» подвыражения из ПРЕДЫДУЩИХ выражений, чтобы я мог использовать сохраненные подвыражения в качестве исходных выраженийдля следующего выражения замены sed.

Если вы думаете, что OOTB работает в любом случае, вы ошибаетесь. Вы просто НЕ МОЖЕТЕ использовать синтаксис '\1' во втором выражении после точки с запятой для ссылки на подвыражение предыдущего выражения (конечно, это работает, если вы определили подвыражение в самом втором выражении, но эта возможность не рассмотреть сейчас). В моем случае это просто неизвестно парсеру, и вы получите ошибку

sed: -e expression #1, char (xx): invalid reference \1 on `s' command's RHS

Есть ли что-нибудь реализованное для выполнения подобных вещей?

0
задан ghoti 12 June 2012 в 21:32
поделиться