Как получить только числа в grep?
У меня есть файл вроде этого:
Я хочу найти появление чисел в указанном выше файле. Я придумал:
Но это печатает целое:
Скорее я хочу только 34 . Есть ли способ сделать это?
4 ответа
Вы можете использовать grep -E для доступа к синтаксису расширенного регулярного выражения (такой же, как egrep )
Я создал тестовый файл с содержимым ниже:
Теперь, чтобы grep только цифры из текста, вы можете использовать
Здесь «- o» используется для вывода только соответствующего сегмента строки, а не полного содержимого строки.
Скользящие скобки (например, <и>) указывают количество экземпляров совпадения. <1,4>требует, чтобы предыдущий символ или класс символа должен происходить по крайней мере один раз, но не более четырех раз.
Надеюсь, что это поможет
Вы можете использовать выражение скобки RE [:digit:] , указанное в разделе 9.3.5 стандарт POSIX в сочетании с -o для печати только соответствующих слов «
grep -o будет печатать только соответствующую часть строки. В противном случае grep будет печатать любые строки с рисунком.
Я использовал бы curl для доступа к вашему файлу локально или удаленно, тогда я бы grep строк с номерами, заключенными в (:), затем вырезал эти фрагменты и записывал в файл
принятый ответ игнорирует, что в предыдущих строках файла могут быть номера, он работает для данных примера, но что, если файл был удален?
Источник
Выделение числа из строки в выводе команды (Bash)
Приветствую всех. Имеется следующий скрипт:
Как в bsd не знаю, в linux можно так
Зачем тебе регулярки, если можно просто через col2 пропустить?
legolegs best.
Сделал так, однако получаю на выходе Illegal Number, а условие со сравнением версий отрабатывается некорректно (переменной CODEGEN всегда присвается значение «private-code»). Где ошибка?
Понял. Дело в том, что пытаюсь сравнить дробные числа. Не подскажите как правильно всё сделать?
Про illegal number не понял, а по поводу сравнения версий, да, это так не работает.
Мне нужно чтобы было >=1.15. Пытаюсь реализовать с помощью bc, но пока не получается
Так выше я привел код, который позволит сравнить версии.
А, хорошо, спасибо. Я просто не совсем понял как он работает. Но работает 🙂
Там соль в сортировке
Взгруснулось. Аж на комментарии хватило энтузиазма.
Источник
Как мне получить только цифры в grep?
У меня есть файл, как это:
Я хочу найти вхождение чисел в вышеуказанный файл. Я придумал:
Но это печать всего:
Скорее хочу только 34 . Есть ли способ сделать это?
Вы можете использовать grep -E для доступа к расширенному синтаксису регулярного выражения (То же, что egrep )
Я создал тестовый файл с содержанием ниже:
Теперь, чтобы извлечь только цифры из текста, который вы можете использовать
Здесь «-o» используется только для вывода соответствующего сегмента строки, а не полного содержимого строки.
Квадратные скобки (например, <и>) указывают количество совпадений. <1,4>требует, чтобы предыдущий символ или класс символов встречался хотя бы один раз, но не более четырех раз.
Надеюсь это поможет
Вы можете использовать скобочное выражение RE, [:digit:] указанное в разделе 9.3.5 стандарта POSIX , в сочетании с -o флагом для печати только соответствующих «слов»
grep -o будет печатать только соответствующую часть строки. В противном случае grep напечатает любые строки с шаблоном.
Я бы использовал curl для локального или удаленного доступа к вашему файлу, затем я бы собрал строки с числами, завернутыми в (:), затем обрезал эти фрагменты и записал в файл
принятый ответ игнорирует, что в предыдущих строках файла могут быть числа, он работает для данных примера, но что, если файл был удаленным?
Источник
Как заставить GREP выбирать только числовые значения?
я использую df команда в скрипте bash:
этот скрипт возвращает:
но мне нужны только цифры (чтобы сделать следующее сравнение). Если я использую grep регулярное выражение без многоточия:
Я ничего не получите. Как исправить?
6 ответов
если вы попробуете:
вот подробности о -o (или —only-matching флаг) работает с страница руководства grep.
печать только совпадающих (непустых) частей совпадающих строк, причем каждая такая часть находится в отдельной выходной строке. Выходные строки используют те же разделители, что и входные, а разделители-нулевые байты, Если также используется-z (—null-data) (см. другой Опции).
grep напечатаем любую строки соответствие шаблону, который вы предоставляете. Если вы хотите напечатать только ту часть строки, которая соответствует шаблону, вы можете передать — o:
— o, —only-matching Печать только совпадающих (непустых) частей совпадающей строки с каждой такой частью в отдельной выходной строке.
нет необходимости использовать grep здесь, попробуйте следующее:
Не используйте больше команд, чем необходимо, оставьте хвост, grep и cut. Вы можете сделать это только с (простой) awk
PS: предоставление размера блока en print только de persentage немного глупо ; -) поэтому оставьте также «- B MB»
df . |на awk -Ф'[несколько разделителей полей] » $NF==»последнее поле должно быть точно — > монтируется patition »
номер из последнего поля)>’
в вашем случае, использовать:
выход: 81
Если вы хотите показать символ процента, Вы можете оставить-F’ [ % ]’, и ваше поле печати переместится на 1 Поле назад
Источник
Как в bash выдернуть слово или набор символов из вывода программы?
Приветы! Нужно выдернуть из вывода команды sensors(который lmsensors) температуру процессора(только цифры). Как это можно сделать?
что-то типа sensors | grep CPU > output
а output почикать sed’ом
Спасибо, будем читать маны
Номера hwmon и temp в твоём случае могут быть другими, тебе их нужно просто найти. Понять кто есть кто, можно например так
Поверь мне, sensors делает тоже самое.
А зачем это делать на баш, когда есть perl5/perl6/python3? Я уже пару лет стараюсь делать подобные вещи уже только на perl6. Зачем учить bash+sed+awk, когда всё равно они не всегда могут заменить нормальные скриптовые языки, а нормальный скриптовый язык их заменит на раз?
Зачем мне учить дополнительный скриптовый язык, когда нужда в подобных вещах, как выдернуть какое-то слово из вывода или что-то подобное мне требуется крайне редко?
Их и не надо учить. Берешь и пишешь.
Номера hwmon и temp в твоём случае могут быть другими, тебе их нужно просто найти
именно поэтому надо использовать sensors, чтобы не искать
Что-то вроде такого:
sensors | grep -E ‘^Physical id’ | awk ‘< print $4 >‘
А дальше — конкретней условия надо.
А ты наверно к себе домой тоже ходишь через соседский балкон? Так же проще, чем отыскать подходящий ключ для своей двери.
Например во многих дистрибутивах есть команда service, хотя проще и нагляднее всегда было /etc/init.d/$NAME $action
Но с переходом с SysV на upstart, a затем на systemd, нормальные админы (использующие «балконы», т.е. service) не заметили смены системы инициализации и продолжают использовать service
В случае смены материнской платы достаточно перенастроить sensors, а не лазать по всем скриптам и менять в них пути в /sys/
И правильная аналогия: я использую мастер-ключ, открывающий все двери, вместо поиска подходящего ключа.
А зачем это делать на баш, когда есть perl5/perl6/python3?
Используй тот инструмент, который знаешь.
Используй тот инструмент, который знаешь
Действительно, зачем покупать шумовку, когда пельмени можно выловить и по одному вилкой. Стоить потратить некоторое время на изучение нового инструмента (потратить некоторые деньги на шумовку), зато начать пользоваться более удобным и гибким инструментом. И да, судя по вопросу, баша (+coreutils+sed+awk+smth else) он один фиг не знает.
Источник