Linux Labs

Bash: обработка текста и скрипты / Ступень 1 из 9

Регулярные выражения в grep

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 7 мин

Вырезать совпадение

Иногда из строки нужен один кусок: номер ошибки, адрес, имя. Шаблон для такого куска и ключ, который печатает только его.

В расширенном синтаксисе + после знака или набора значит «один или больше подряд». [0-9]+ — число любой длины, а err=[0-9]+ совпадает с err=0, err=5 и err=12. Число в фигурных скобках задаёт точное число повторов: [0-9]{3} — три цифры подряд. Ключ -o меняет то, что печатает grep, — посмотри, как.

Упражнение · посмотреть

Вырежи номера ошибок

В ~/grep-lab выполни поиск err= с номером и ключом -o, а потом посчитай найденное конвейером.

Сначала предположи

Что напечатает первая команда, с ключом -o?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа

С -o grep печатает каждое совпадение отдельной строкой, без остального текста. Такой вывод — готовый вход для sort | uniq -c из урока о конвейерах: подсчёт показывает, какой номер ошибки встречается чаще.

Точка в шаблоне — любой знак, поэтому шаблон 10.0.0.7 совпадёт и с 10a0b0c7. Чтобы точка значила саму себя, перед ней ставят обратную косую черту: 10\.0\.0\.7.

Проверь себя 1 вопрос

В hosts.txt три строки: 192.168.1.1 gw, 192.168.111.5 printer и 192.168.1.10 nas. Какие из них напечатает grep '192.168.1.1' hosts.txt?

  • Точка совпадает с любым знаком, поэтому шаблон нашёлся и в 192.168.111.5. А в 192.168.1.10 он совпал с началом адреса.

  • В 192.168.1.10 шаблон совпал с первыми одиннадцатью знаками: grep ищет его в любом месте строки, и строка nas тоже в выводе.

  • Точка в шаблоне — любой знак: в 192.168.111.5 она совпала с цифрой 1, и строка printer тоже в выводе.

Точка совпала с цифрой в адресе принтера, а в адресе nas шаблон нашёлся в начале более длинного числа. Одну строку gw напечатает grep -w '192\.168\.1\.1' hosts.txt: точки с обратной чертой и целое слово.

Ubuntu 24.04
Загрузка…