Автор Тема: Вопрос по регулярным выражениям в grep  (Прочитано 2759 раз)

Оффлайн neutrino17

  • Участник
  • *
  • Сообщений: 43
Как в утилите grep соединить 2 регулярных выражения в 1? Например, сейчас я вывожу список всех файлов, различающихся в 2-х каталогах таким образом:

diff --brief . ../d1 | grep -v ^Об| grep -v То

вырезая таким образом строки с "Общими подкаталогами:" и "Только в:", а это, сами понимаете, и длинно, и лишний процесс на каждый grep.

Оффлайн Карлсон

  • Участник
  • *
  • Сообщений: 1 699
Как в утилите grep соединить 2 регулярных выражения в 1? Например, сейчас я вывожу список всех файлов, различающихся в 2-х каталогах таким образом:

diff --brief . ../d1 | grep -v ^Об| grep -v То

вырезая таким образом строки с "Общими подкаталогами:" и "Только в:", а это, сами понимаете, и длинно, и лишний процесс на каждый grep.

Может быть как-то так?

[karlson@intel_server bin]$ ls | grep "^m" | grep "de"
mdel
mdeltree
[karlson@intel_server bin]$ ls | egrep \("^m"\)\("de"\)
mdel
mdeltree


Оффлайн neutrino17

  • Участник
  • *
  • Сообщений: 43
Да, egrep -v \("^Об"\)\|\("^То"\) сработало. Спасибо :)

DdShurick

  • Гость
# diff --brief . ../d1 | grep -vE "^Об|^То|итд|итп"

Оффлайн neutrino17

  • Участник
  • *
  • Сообщений: 43
# diff --brief . ../d1 | grep -vE "^Об|^То|итд|итп"

Крутяк!

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
подскажите пожалуйста как найти строки с содержанием  local  IP address
если grep попростому отказывается?
[root@host-242 ~]# cat /mnt/sdf6/opt/var/log/syslog-ng.log | grep local  IP address
grep: IP: Нет такого файла или каталога
grep: address: Нет такого файла или каталога
[root@host-242 ~]#


В общем логе надо вывести все строки содержащие" local  IP address" и три строки ниже каждой. (это насколько я помню -A3
« Последнее редактирование: 08.07.2013 15:20:19 от МИНЗДРАВ »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 365
  • Учиться .... Телепатами не рождаются, ими ....
Возьмите в кавычки:
"local  IP addres"

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
Возьмите в кавычки:
"local  IP addres"
не работает
[root@host-242 ~]# cat /mnt/sdf6/opt/var/log/syslog-ng.log | grep "local IP address"
[root@host-242 ~]# cat /mnt/sdf6/opt/var/log/syslog-ng.log | grep 'local IP address'
[root@host-242 ~]#

А на самом деле, такая строка есть 19:14:30 03-07-2013 (notice|daemon|pppd) pppd[24529]: local  IP address 5.167.167.117
« Последнее редактирование: 08.07.2013 16:27:49 от МИНЗДРАВ »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 365
  • Учиться .... Телепатами не рождаются, ими ....
Там число пробелов другое между local и IP

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
а что можно сделать, чтоб количество пробелов не имело значения в поиске?
« Последнее редактирование: 08.07.2013 20:22:18 от МИНЗДРАВ »

Оффлайн Spanish ArCher

  • Участник
  • *
  • Сообщений: 1 234
а что можно сделать, чтоб количество пробелов не имело значения в поиске?
egrep -i "local[[:space:]]*IP address"
Если я попался вам навстречу, Значит вам со мной не по пути.
(С) Воскресение

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
а почему egrep ? а не просто grep ?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 365
  • Учиться .... Телепатами не рождаются, ими ....
Насколько я помню egrep = grep -E, а fgrep = grep -f

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
А что практически даёт -E или -F ? на моём примере
 
В мане читал, но не понял.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 173
    • Домашняя страница
А что практически даёт -E или -F ? на моём примере
 
В мане читал, но не понял.
Спецсимволы (кроме *) теряют своё специальное значение. Хотя в вашем случае можно и без egrep обойтись:
grep "local[[:space:]]\+IP address"[:space:] - все пробельные символы (кроме пробелов ещё и символы табуляции).
[[:space:]]\+ (плюс с экранирующим обратным слешем) — сколько угодно, но хотя бы один пробельным символ. Если бы оставили *, то под условие подпадает и отсутствие пробелов.
-i не нужен, так как это сравнение без учёта регистра.

Совет на будущее: проще искать минимально необходимую строку: grep 'IP address'
Андрей Черепанов (cas@)