Grep, Адмінчег
Posted on Листопад 6, 2013
Ключі
grep -oe
-E, —extended-regexp PATTERN — інтерпретувати PATTERN як розширений регулярний вираз
-o, -only-matching - виводить тільки те, що відповідає регулярному виразу
Приклади:
є файл з налаштуваннями DHCP у вигляді: host h1 hardwareethernet 00:40: d1: 64: ee: 80; fixed-address 10.167.13.121; > …. host h1000 hardwareethernet 00:13:77:3d:46:6f; fixed-address 10.167.12.104; >Йому треба було привести його до вигляду:
grep -E -o '[0-9,aAbBcCdDeEfF](\:[0-9,aAbBcCdDeEfF;])'
cat /etc/dhcp3/dhcpd.conf grep -E -o ‘[0-9,aAbBcCdDeEfF](\:[0-9,aAbBcCdDeEfF;])’
Для пошуку IP регулярне вираз аналогічне - [0-9] (\. [0-9,;]). Думаю, чому воно таке, зрозуміло.
for i in $(cat /etc/dhcp3/dhcpd.conf grep -E -o $mac) do echo $i > mac done
Тепер готуємо дані у потрібному форматі для конфігу DHCP:
c=1d=1
hn="host h"fa=" fixed-address "hd=»< hardware ethernet "cl=" >"
for i in $(cat mac)dod=1for j in $(cat ip)do
if test $c = $dthenecho $hn$c$hd$i$fa$j$cl>dhcpd.conffi
d=$((d+1))done
c=$((c+1))done
виведе рядки, в яких знайдено відповідність, плюс 2 рядки до 2 після кожного знайденого.
grep -C 2 pattern files
У grep символ "*" має дещо інше значення. У grep цей символ необхідно групувати з іншими. Наприклад, якщо вам потрібен той самий ефект, як і в оболонці, використовуйте таке:
grep ‘.*’ pattern files
Символ«^» відповідає початку рядка, а символ«$» - її кінця.
grep інтерпретувала спецсивмолы як звичайні - попередьте їх зворотним слішем.
grep '\*' filename
буде шукати рядки, що містять символ зірочки в filename.
Зверніть увагу на подвійні дужки.
grep '[[:punct:]]$' files
У виразах можна використовувати діапазони та класи символів. Для цього при складанні шаблону grep використовуються квадратні дужки. Наприклад, символу в діапазоні від A до Z буде відповідати шаблон [A-Z]», а будь-якій цифрі - [0-9]»». Також, використовуючи квадратні дужки, ви можете визначати відповідність класам символів. Наприклад, [:punct:]»» буде відповідати будь-якому розділовому знаку.