Изменить [tr][tr]{X} на [tr][tr]{\tinyX} в длинном списке файлов в bash?

Изменить [tr][tr]{X} на [tr][tr]{\tinyX} в длинном списке файлов в bash?

Новичок здесь. Я пытаюсь запрограммировать скрипт bash, который заменит для каждого файла в папке следующую последовательность: [tr][tr]{X}где X — любое десятичное число (набор цифр и «.») на [tr][tr]{\tinyX}.

Есть идеи?

Спасибо

решение1

Если у вас нет доступа к GNU sed, вы также можете использовать perl(чей -iGNU sedфактически позаимствовал):

find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +

решение2

С помощью GNU, sedиспользующего глобальный шаблон замены s/regexp/replacement/g:

sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*

Это захватывает строку [tr][tr]{в одной группе и Xсодержит по крайней мере одну цифру или .(выражение в скобках [0-9.]\+, \+соответствует символам внутри скобок один или несколько раз), за которым следует закрытие }во второй группе, и заменяет совпадающие части первой группой \tinyи второй группой в каждой строке. Скобки ()для групп, буквальные скобки []и +буквальный обратный слеш \необходимо экранировать еще одним обратным слешем.

Перед запуском обязательно сделайте резервную копию папки с данными (или используйте -i.backвместо нее , -i''чтобы сохранить оригиналы как filename.back).

Связанный контент