grep - "наше фсё"
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
grep - "наше фсё"
Про grep и регулярные выражения понаписаны тома... нечего тут рассуждать.
Я здесь только практические полезные памятки для себя буду оставлять - то что пригодилось но не очень сразу удаётся найти.
Те опции и случаи, которыми я активно пользуюсь, но временами они забываются...
Я здесь только практические полезные памятки для себя буду оставлять - то что пригодилось но не очень сразу удаётся найти.
Те опции и случаи, которыми я активно пользуюсь, но временами они забываются...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Очень и очень частая ситуация - нужно найти не только строку (строки) содержащие контекст, но и несколько (N) строк следующих за найденной.
И это делает опция -An
Вот как на моём "ядрёном" сервере выглядит информация по частотам, а заодно и по размерам кэша:
Поскольку теперь возникли группы строк, в этом случае по 2, но в общем виде при -An - по n+1 - то теперь grep добавляет разделители: "--".
И это делает опция -An
Вот как на моём "ядрёном" сервере выглядит информация по частотам, а заодно и по размерам кэша:
Код: Выделить всё
olej@R420:~$ cat /proc/cpuinfo | grep 'cpu MHz' -A1
cpu MHz : 1200.030
cache size : 15360 KB
--
cpu MHz : 1199.877
cache size : 15360 KB
--
cpu MHz : 1200.116
cache size : 15360 KB
--
cpu MHz : 1200.000
cache size : 15360 KB
--
cpu MHz : 1244.731
cache size : 15360 KB
--
cpu MHz : 1200.344
cache size : 15360 KB
--
cpu MHz : 1252.516
cache size : 15360 KB
--
cpu MHz : 1199.972
cache size : 15360 KB
--
cpu MHz : 1336.749
cache size : 15360 KB
--
cpu MHz : 1200.267
cache size : 15360 KB
--
cpu MHz : 1232.074
cache size : 15360 KB
--
cpu MHz : 1200.214
cache size : 15360 KB
--
cpu MHz : 1279.366
cache size : 15360 KB
--
cpu MHz : 1199.889
cache size : 15360 KB
--
cpu MHz : 1228.880
cache size : 15360 KB
--
cpu MHz : 1200.041
cache size : 15360 KB
--
cpu MHz : 1269.996
cache size : 15360 KB
--
cpu MHz : 1200.030
cache size : 15360 KB
--
cpu MHz : 1285.710
cache size : 15360 KB
--
cpu MHz : 1199.809
cache size : 15360 KB
--
cpu MHz : 1155.861
cache size : 15360 KB
--
cpu MHz : 1200.061
cache size : 15360 KB
--
cpu MHz : 1230.238
cache size : 15360 KB
--
cpu MHz : 1200.113
cache size : 15360 KB
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
А если мне нужны строки не следующие, а предшествующие контексту поиска?
Пожалуйста! (опция -B):
Код: Выделить всё
olej@nvme:~$ cat /proc/cpuinfo | grep ^stepping -B3
cpu family : 6
model : 158
model name : Intel(R) Celeron(R) CPU G3930 @ 2.90GHz
stepping : 9
--
cpu family : 6
model : 158
model name : Intel(R) Celeron(R) CPU G3930 @ 2.90GHz
stepping : 9
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Поиск независимо от малых/больших букв в контексте...
Например, при работе с оборудованием часто требуется разборка с VID:PID ... когда я знаю, например, что производитель (VID, Vendor) NVIDIA - это 10DE:
То же самое очень часто для USB:
Тогда:
Но:
Например, при работе с оборудованием часто требуется разборка с VID:PID ... когда я знаю, например, что производитель (VID, Vendor) NVIDIA - это 10DE:
Код: Выделить всё
olej@nvme:~$ lspci -n | grep -i 10DE
01:00.0 0300: 10de:1287 (rev a1)
01:00.1 0403: 10de:0e0f (rev a1)
Код: Выделить всё
olej@nvidia:~$ lsusb
Bus 002 Device 003: ID 14cd:168a Super Top
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 007: ID 05d8:4002 Ultima Electronics Corp. Artec Ultima 2000 (GT6801 based)/Lifetec LT9385/ScanMagic 1200 UB Plus Scanner
Bus 001 Device 006: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 003: ID 0624:0200 Avocent Corp.
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Код: Выделить всё
olej@nvidia:~$ lsusb | grep -i 1D6B
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Код: Выделить всё
olej@nvidia:~$ lsusb | grep 1D6B
olej@nvidia:~$
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Современный grep отлично справляется с UNICODE в кодировке UTF-8, т.е. "разбирается" и в русскоязычных текстах.
Возьмём за пример 2-х строчный (опция -e и управляющий символ \n в строке) образец:
А теперь через grep:
В противовес:
Возьмём за пример 2-х строчный (опция -e и управляющий символ \n в строке) образец:
Код: Выделить всё
olej@nvidia:~$ echo -e "ЭТО БОЛЬШИЕ БУКВЫ. \nА это малые буквы"
ЭТО БОЛЬШИЕ БУКВЫ.
А это малые буквы
Код: Выделить всё
olej@nvidia:~$ echo -e "ЭТО БОЛЬШИЕ БУКВЫ. \nА это малые буквы" | grep буквы
А это малые буквы
Код: Выделить всё
olej@nvidia:~$ echo -e "ЭТО БОЛЬШИЕ БУКВЫ. \nА это малые буквы" | grep -i буквы
ЭТО БОЛЬШИЕ БУКВЫ.
А это малые буквы
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Понадобилось, при настройках локализаций для Raspbian OS выделить целый фрагмент, и до и после искомой строки ("xkb") - Raspberry Pi 2 ... снова. Естественно, это достигается объединением опций -B и -A:
Код: Выделить всё
pi@raspberrypi:~/.config/lxpanel/LXDE/panels $ cat ~/.config/lxpanel/LXDE/panels/panel | grep xkb -B1 -A 7
Plugin {
type=xkb
Config {
Model=pc105
LayoutsList=us,ru
VariantsList=,
ToggleOpt=grp:alt_shift_toggle
KeepSysLayouts=0
}
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Нужно оставить только те строки, которые НЕ содержат образца.
Простейший пример - отбраковать в конфигурационных файлах строки комментариев.
Код: Выделить всё
root@raspberrypi:/etc# cat /etc/dphys-swapfile | grep ^# | wc -l
18
Отбраковываем (опция -v):
Код: Выделить всё
root@raspberrypi:/etc# cat /etc/dphys-swapfile | grep -v ^#
CONF_SWAPSIZE=100
Правда осталось ещё куча пустых строк.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Но пустые строки я могу отфильтровать так:
Код: Выделить всё
root@raspberrypi:/etc# cat /etc/dphys-swapfile | grep -v ^# | grep -v ^$
CONF_SWAPSIZE=100
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Логические операции в grep
1. Операция ИЛИ
...
2. Операция И
...
3. Операция НЕ
...
4. Регулярные выражения
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: grep - "наше фсё"
Вот как выглядит идентификация в /proc//kallsyms адресов первых 10-ти системных вызовов:
Код: Выделить всё
olej@R420:~/2022/own.BOOKs/BHV.kernel/examples/sys_call_table/call_table$ sudo grep 'ffffffffacecdf00\|ffffffffacece020\|ffffffffacec9bd0\|ffffffffacec7c80\|ffffffffaced2fe0\|ffffffffaced3200\|ffffffffaced30a0\|ffffffffacee6ed0\|ffffffffacecb820\|ffffffffacc36820' /proc//kallsyms
ffffffffacc36820 T __x64_sys_mmap
ffffffffacec7c80 T __x64_sys_close
ffffffffacec9bd0 T __x64_sys_open
ffffffffacecb820 T __x64_sys_lseek
ffffffffacecdf00 T __x64_sys_read
ffffffffacece020 T __x64_sys_write
ffffffffaced2fe0 T __x64_sys_newstat
ffffffffaced30a0 T __x64_sys_newlstat
ffffffffaced3200 T __x64_sys_newfstat
ffffffffacee6ed0 T __x64_sys_poll
Код: Выделить всё
olej@mint:/usr/include/x86_64-linux-gnu/asm$ head -n13 /usr/include/x86_64-linux-gnu/asm/unistd_64.h
#ifndef _ASM_X86_UNISTD_64_H
#define _ASM_X86_UNISTD_64_H 1
#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
#define __NR_lstat 6
#define __NR_poll 7
#define __NR_lseek 8
#define __NR_mmap 9
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей