выражение grep, чтобы найти число

Я хотел бы найти номер в имени хоста. Обычно имя хоста серверов – это что-то вроде ниже

host01.host.name host02.host.name 

Я хочу получить 2 цифры до первого символа . который равен 01 или 02 и присваивает его переменной. Может ли кто-нибудь помочь мне с подходящей командой.

  • Использование / proc / stat для количества процессов, запущенных в системе
  • Есть ли какое-либо преимущество в использовании аргумента -j2 при создании Linux-систем в VirtualBox?
  • автозапуск программы linux при запуске от пользователя без полномочий root в centOS 6 64bit
  • Можно ли игнорировать сигнал (потерять)?
  • Почему man statfs 'FUTEXFS_SUPER_MAGIC равен плохим идеям (0xBAD1DEA)?
  • awk regex соответствует неправильному?
  • Является ли ядро ​​Linux бесплатным для изменения?
  • Измените номер раздела с sda1 на sda2
  • Видео водяные знаки
  • Почему я не могу удалить этот файл с правами root?
  • Преобразование текста в табличную форму
  • lookbehind и использовать его с grep в Vi?
  • 3 Solutions collect form web for “выражение grep, чтобы найти число”

    grep с PCRE ( -P ):

     grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt 
    • ^[^\d.]* соответствует части до первых цифр от начала, также убедившись, что нет . перед цифрами \K отбрасывает совпадение

    • \d+ соответствует одной или нескольким цифрам

    • (?=\.) представляет собой положительный обратный шаблон с нулевой шириной, убедившись, что это так . спереди


    Поскольку будет несколько выходов, лучше сохранить их в массиве:

     output=( $(grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt) ) 

    Теперь вы можете перебирать элементы массива или использовать их обычным массивом, обращаясь к манерам, например, чтобы получить значение n-го элемента, используя "${output[n]}" , чтобы все значения всех ключей использовали "${output[@]}" .


    sed :

     sed -E 's/^[^[:digit:].]*([[:digit:]]+)\..*/\1/' file.txt 
    • Подобно grep one, ^[^[:digit:].]* Соответствует части до первых цифр с начала, также убедившись, что нет . перед цифрами

    • ([[:digit:]]+) соответствует одной или нескольким цифрам и помещает их в захваченную группу 1

    • \..* соответствует a . а затем остальные

    • При замене используется только захваченная группа \1


    Пример:

     $ cat file.txt host01.host.name host02.host.name $ grep -Po '^[^\d.]*\K\d+(?=\.)' file.txt 01 02 $ sed -E 's/^[^[:digit:].]*([[:digit:]]+)\..*/\1/' file.txt 01 02 
     $ echo host01.host.name | grep --only-matching '[0-9]*' 01 

    Он использует основное регулярное выражение [0-9]* для согласования и согласование GNU Grep – --only-matching (или, может быть, -o для другого Grep) для фильтрации выходных данных.

     echo "host01.host.name host02.host.name" | sed 's/\..*//;s/[^0-9]*//' 

    или для вас;

     hostname | sed 's/\..*//;s/[^0-9]*//' 

    альтернативное решение:

     echo "host01.host.name host02.host.name" | grep -o "[0-9]*" | head -1 

    или для вас;

     hostname | grep -o "[0-9]*" | head -1 
    Linux и Unix - лучшая ОС в мире.