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

У меня есть файл, в котором я хочу изменить весь код, который имеет следующий формат: 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, что-то вроде этого:

  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 . Любая помощь оценивается с объяснением. Благодаря!

  • Я хочу использовать «sed» для вставки новых строк (одна строка превращается в сотни)
  • awk, sed, grep, perl ... которые распечатываются в этом случае?
  • Рекурсивный поиск / замена, учет глубины каталога
  • Как заменить символ в sed, только если это происходит до буквы?
  • Как разместить данные, ограниченные скобками, в одной строке?
  • Найти больше дубликатов
  • регулярное выражение grep grep в команде sed
  • Как я могу отображать 3 строки текста за один раз на 1 строку?
  • 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 для поиска без учета регистра вместо использования классов символов.

    Interesting Posts

    фиксация / dev / ttyUSB

    В Linux, как получить «несовместимые» библиотеки i386 f77 для работы с текущими компиляторами Fortran, такими как gfortran?

    Можно ли отключить автоматические обновления пакетов Debian?

    Возможность легко переключаться между каталогами в разных областях

    Могу ли я легко переключаться с openSUSE Tumbleweed на Leap без переустановки всего?

    SQLPLUS с циклами сценариев оболочки

    как запустить скрипт при завершении ubuntu, когда ему нужна сеть

    diff -r только для определенных типов файлов

    Форматировать текст в Linux

    Как обновить файловую систему смонтированных squashfs

    Как установить переменную среды на основе доступности графического интерфейса?

    ImportError: /usr/lib64/libxml2.so.2: version `LIBXML2_2.9.0 'не найден

    apache2 нет доступных сокетов для прослушивания, но ничего не слышно на порту

    Что происходит с аргументом в псевдониме после его использования один раз?

    Удалите обе строки, если значения столбца A повторяются в следующей строке

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