Как заменить несколько букв в многострочном слове, состоящем из цифр и букв в определенном формате?

У меня есть файл, в котором я хочу изменить весь код, который имеет следующий формат: n{,3}L{,2}n{,5} where n= [0-9] any number and L [a-zA-Z] any letter either capital or not

Я хочу изменить A или a на AB и d или D в DK, что-то вроде этого:

  • Как избежать пробелов при использовании вывода команды в командной строке
  • Инструмент командной строки для мониторинга Java-кучи
  • Как смонтировать диск под моим домашним каталогом при загрузке?
  • Почему создание разделов в Linux является хорошим решением для легкого восстановления?
  • Реле TCP / IP от одного клиента к нескольким клиентам
  • Как добавить слово для строки, в которой выполняется транспонирование
  •   Annnnn--> ABnnnnn ; Dnnn-->DKnnn 

    файл выглядит так:

     $ cat filename 123a67,64,xx A67990,12,ttt 89d7,34,ggg 234AB445,78,ooo 145aB7699,67,rrr 278Dk89,25,ppp 

    Я попробовал следующий сценарий sed

     sed 's/[aA]/AB/g;s/[dD]/DK/g' filename 

    он работает для экземпляров, которые имеют только A или D, но для тех, которые уже являются AB или DK, он добавляет букву как AB--> ABB or DK-->DKK . Любая помощь оценивается с объяснением. Благодаря!

  • Рекомендуемые ресурсы для работы с сервером только для терминалов?
  • Bash - оболочка vs переменная среды
  • Как создать скрипт bash до тех пор, пока не будет установлен pendrive?
  • Использование grep / sed / awk для классификации записей в файле журнала
  • Как я могу печатать текущие чтения и записи в файловую систему по требованию?
  • Как получить PID подпроцесса через родительский процесс в сценарии оболочки bash?
  • One Solution collect form web for “Как заменить несколько букв в многострочном слове, состоящем из цифр и букв в определенном формате?”

    Что касается того, что не так с вашим скриптом, вы заменяете A или a на AB и D или d на DK , поэтому любые ранее существовавшие B или K не будут затронуты; sed не ищет его. Вы можете использовать [kK] [bB] или [kK] ? (ноль или один из предыдущего символа), чтобы он заменил этот символ, если это произойдет.

    Чтобы убедиться, что замена происходит только в том случае, если для параметра [aA] или [aA][bB] т. Д. [aA][bB] число, вы можете добавить номер в шаблон и добавить его обратно в замещение () и \1

     sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename 

    Я использую -r для использования ERE (так что вам не нужно бежать ? ), И I для поиска без учета регистра вместо использования классов символов.

    Linux и Unix - лучшая ОС в мире.