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

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

host01.host.name host02.host.name 

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

  • Рекомендуемые ресурсы для работы с сервером только для терминалов?
  • Как я могу изучить некоторые усовершенствованные методы логротата?
  • Pulseaudio не регистрирует профиль HFP на сервере SDP
  • Как запустить новую версию AIX в виртуальной машине с хостом Linux?
  • Какой модуль edac следует включить здесь?
  • в чем разница между процессором и ядром?
  • сценарий входа в систему и блок доступа root ssh
  • Как изменить хранимую процедуру в базе данных MySQL с помощью командной строки Linux?
  • 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 - лучшая ОС в мире.