Иногда из строки нужен один кусок: номер ошибки, адрес, имя. Шаблон для такого куска и ключ, который печатает только его.
В расширенном синтаксисе + после знака или набора значит «один или больше подряд». [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.
В 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: точки с обратной чертой и целое слово.