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

У меня есть файл, в котором я хочу изменить весь код, который имеет следующий формат: 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 шаблонов с удалением по строке
  • Строки соответствия, начинающиеся с одного шаблона в двух текстовых файлах
  • sed ведет себя по-разному в FreeBSD и Linux?
  • Измените /etc/lvm/lvm.conf и добавьте новый глобальный фильтр
  • удалить строки, содержащие определенный текст в файле
  • Добавление запятых между элементами двоичной матрицы в текстовом файле
  • Как я могу сортировать список с уровнем major.minor.patch и иногда rc правильно?
  • 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

    Где найти активный сервер репозитория бутстрапов?

    Найти строки в файле1, количество экземпляров в файле2

    Почему ping6 разрешает foo.localdomain до :: 1?

    Установка новой версии приложения в $ HOME без доступа root и подключение к установленному приложению

    Ошибка миграции Plesk 10

    mutt после запроса пароля, используемого как для imap, так и для smtp

    Цветной `cat` для исходных файлов и файлов сценариев?

    Linux / UNIX для более старого (Pentium 4) ноутбука

    Как я могу получить DVD-диски в Debian?

    Предоставление разрешений всем пользователям в группе для записи в каталог и все его подкаталоги

    Как разрешать имена хостов с помощью Raspbian 5/5/2015?

    Проблема создания группы в репо: «yum-groups-manager: ошибка: нет такой опции: –default»

    Правильная настройка операционной системы на зашифрованном диске LUKS с алгоритмом non-aes для дистрибутива на основе yum (CentOS)

    Как удалить предустановленные расширения Gnome по умолчанию?

    Как просмотреть файлы, содержащие пробелы в имени файла?

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