Helpers - компьютеры, интернет, программирование

Замените шаблон строки, содержащий баллы и символы подчеркивания, проблема с захватом

Всем добрый день!

Я схожу с ума, пытаясь использовать sed для замены шаблона строки. Я искал старые темы о sed и экранировании специальных символов, но я все еще не могу это сделать. Я думаю, что мой разум сейчас слишком глубоко желает запутать проблему больше, чем это необходимо, чтобы найти легкий путь.

У меня есть документ .tsv, в котором второй столбец представляет аннотации тегов, которые представлены в виде следующих возможностей:

B-something
B-something-something
B-something_something
B-something-something_something
I-something
I-something-something
I-something_something
I-something-something_something

Мне нужно заменить все B-*s на B, и то же самое с I-*s -> I.

Я знаю, что мог бы сделать это на Python, но мне нужно изучить sed для быстрой предварительной обработки в будущем.

Я играл с regex101, и, похоже, работает следующий шаблон:

\b([BI]-[a-zA-Z_-]+)\b

Используя sed, я мог захватить первую часть, то есть «B-first_character», используя: sed /s/\([BI]-[a-zA-Z]\)/replacing_word/g' input > output

Ничего не заменяется, когда я использую: sed /s/\([BI]-\)\([a-zA-Z_-]+\)/replacing_word/g'

Вероятно, последний кусок кода — это ужасная ошибка в моих ошибках, мой разум сейчас немного затуманен. Извините за тупую тему и всем спасибо.

20.11.2019

  • Пожалуйста, опубликуйте ожидаемый результат в своем посте для большей ясности. 20.11.2019
  • + — это литерал + в шаблоне BRE POSIX. Используйте -E или замените + на \{1,\} Замените на \1. Попробуйте LC_ALL=C sed 's/\([BI]\)-[a-zA-Z_-]\{1,\}/\1/g' file 20.11.2019

Ответы:


1

Команда sed повреждена: вы не можете использовать / перед командой подстановки s здесь, поскольку вы хотели просто использовать ее в одинарных кавычках.

Кроме того, + является литералом + в шаблоне BRE POSIX. Используйте -E или замените + на \{1,\}.

Чтобы восстановить захваченное значение, используйте \NUMBER в шаблоне замены.

Вы можете использовать

LC_ALL=C sed 's/\([BI]\)-[a-zA-Z_-]\{1,\}/\1/g' file

См. онлайн-демонстрацию.

LC_ALL=C заставит все классы символов вести себя так же, как на regex101.com.

Сведения о шаблоне

  • \([BI]\) - Группа 1: B или I
  • - - дефис
  • [a-zA-Z_-]\{1,\} — одна или несколько букв ASCII, _ или - символов.
20.11.2019
  • Я тебя люблю. Спасибо за отличный ответ и помощь. Да, команда sed изначально была повреждена, я плохо написал здесь. 20.11.2019
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..