$ cat phoo1234567_sedFix.sed
#! /bin/sed -f
/'[0-9][0-9]\.[0-9][a-zA-Z][a-zA-Z]'/s/'\([0-9][0-9]\)\.\([0-9][a-zA-Z][a-zA-Z]\)'/\1_\2/
Это отвечает на ваш конкретный вопрос. Если шаблон, который вам нужно исправить, не всегда соответствует приведенному вами примеру, вам понадобится несколько копий этой строки, с регулярными выражениями, измененными в соответствии с вашими новыми целями изменений.
Обратите внимание, что cmd состоит из 2 частей, "/'[0-9][0-9].[0-9][a-zA-Z][a-zA-Z]'/" говорит: должен соответствовать линиям с этим шаблоном, в то время как завершающий "s / '([0-9] [0-9]). ([0-9] [a-zA-Z] [a-zA-Z])' / \ 1_ \ 2 / ", это часть, которая выполняет замену. Вы можете добавить 'g' после последнего '/', чтобы эта замена произошла во всех экземплярах этого шаблона в каждой строке.
Пары \ (\) в шаблоне сопоставления преобразуются в пронумерованные буферы на стороне замещения команды (т. Е. \ 1 \ 2). Это то, что дает силу sed, которой нет в awk.
Если вы собираетесь выполнять большую часть подобного рода работы, я настоятельно рекомендую книгу О'Рилли «Седь и пробуждайся». Время, потраченное на то, как работает sed, будет возвращено много раз.
Надеюсь, это поможет.
P.S. поскольку вы выглядите как новый пользователь, если вы получите ответ, который поможет вам, не забудьте пометить его как принятый или поставить + (или -) в качестве полезного ответа.