Nano Hash - криптовалюты, майнинг, программирование

Извлечение чисел из строки с помощью sed и регулярных выражений

Еще один вопрос к знатокам sed.

У меня есть строка, представляющая имя пути, в котором будут два числа. Пример:

./pentaray_run2/Trace_220560.dat

Мне нужно извлечь второе из этих чисел, то есть 220560

Я (с некоторой помощью на форумах) смог извлечь все числа вместе (например, 2220560) с помощью:

sed "s/[^0-9]//g"

или извлеките только первое число с помощью:

sed -r 's|^([^.]+).*$|\1|; s|^[^0-9]*([0-9]+).*$|\1|'

Но то, что мне нужно, это второй номер !! Любая помощь очень ценится.

PS число, которое я ищу, всегда является вторым числом в строке.

19.10.2012

Ответы:


1

это нормально?

sed -r 's/.*_([0-9]*)\..*/\1/g'

с вашим примером:

kent$   echo "./pentaray_run2/Trace_220560.dat"|sed -r 's/.*_([0-9]*)\..*/\1/g'
220560
19.10.2012
  • Отличные работы - удовольствие. Я предполагаю, что _ там означает искать числа только после подчеркивания? В этом случае я всегда могу ожидать подчеркивания, так что это сработает. Какая именно часть выражения это делает? * _ Stackoverflow действительно такой фантастический ресурс - я ломал голову над этим в течение нескольких часов. Как вы думаете, из интереса, есть ли способ использовать \ 1 в конце - возможно, извлечь все числа (непрерывные цифры) как подстроки и запросить второе. Это может быть полезно мне и другим в будущем? 19.10.2012

  • 2

    Вы можете извлечь последние числа с помощью этого:

    sed -e 's/.*[^0-9]\([0-9]\+\)[^0-9]*$/\1/'
    

    Легче подумать об этом задом наперед:

    1. С конца строки сопоставьте ноль или несколько нецифровых символов.
    2. Сопоставление (и захват) одного или нескольких цифровых символов
    3. Соответствует хотя бы одному нецифровому символу
    4. Сопоставьте все символы с началом строки

    В третьей части совпадения происходит «волшебство», но оно также ограничивает ваши совпадения, чтобы перед номером была по крайней мере не цифра (т. Е. Вы не можете сопоставить строку только с одним числом, которое находится в начале строку, хотя есть простой обходной путь - вставить не цифру в начало строки).

    Магия состоит в том, чтобы противодействовать жадности слева направо .* (часть 4). Без части 3 часть 4 потребляла бы все, что может, включая числа, но с ней сопоставление гарантирует, что она останавливается, чтобы позволить, по крайней мере, нецифровой, за которой следует цифра, потребляться частями 1 и 2, позволяя захватить номер.

    19.10.2012

    3

    Если grep приветствуется:

    $ echo './pentaray_run2/Trace_220560.dat' | grep -oP '\d+\D+\K\d+'
    220560
    

    И более переносимый с Perl с тем же регулярным выражением:

    echo './pentaray_run2/Trace_220560.dat' | perl -lne 'print $& if /\d+\D+\K\d+/'
    220560
    

    Я думаю, что этот подход чище и надежнее, чем использование sed

    19.10.2012

    4

    Это может сработать для вас (GNU sed):

    sed -r 's/([^0-9]*([0-9]*)){2}.*/\2/' file
    

    Это извлекает второе число:

    sed -r 's/([^0-9]*([0-9]*)){1}.*/\2/' file
    

    и это извлекает первое.

    19.10.2012
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..