Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Grep - как объединить два действия в одно?  (Прочитано 1328 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Здравствуйте.

Подскажите, есть две команды
первая grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/auth.log | sort | uniq >> /home/test/all_ip.txt - выбирает IP
вторая grep -v 192.168.1.33 /home/test/all_ip.txt >> /home/test/bad_ip.txt - удаляет ненужный и записывает все оставшиеся
Как написать в одну строку, что-то по всякому попробовал, не фурычит.

Нужно выбрать все ip, удалить не нужный и записать оставшиеся в текстовик.
Спасибо.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Grep - как объединить два действия в одно?
« Ответ #1 : 10 Января 2015, 22:50:06 »
Ввысь, я в баше не силён, но такой вариант чем не устраивает
Код: (bash) [Выделить]
echo ... | grep 'first conditional' | grep 'secodn conditional'
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Grep - как объединить два действия в одно?
« Ответ #2 : 11 Января 2015, 14:18:11 »
Или использовать sed(при одном адресе в строке)sed -rn '/192\.168\.1\.33/! s/.*(([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/p' /var/log/auth.log | sort -u >> /home/test/all_ip.txtесли несколько — надо усложнять регулярку.
А вообще c grep проще (см. у alsoijw)
« Последнее редактирование: 11 Января 2015, 14:22:05 от Azure »
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Ввысь

  • Автор темы
  • Активист
  • *
  • Сообщений: 473
    • Просмотр профиля
Re: Grep - как объединить два действия в одно?
« Ответ #3 : 11 Января 2015, 14:49:42 »
В общем остановился на этом.
То что нужно делает,а с регулярками это тяжко.

grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/auth.log | sort | uniq | grep -v 192.168.*.* >> /home/test/bad_ip.txt

Всем спасибо.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Grep - как объединить два действия в одно?
« Ответ #4 : 11 Января 2015, 15:00:45 »
Небольшое дополнение: «.» — это любой символ, «*» — 0 или любое количество предыдущего элемента. Так что ...|grep -v '192\.168\..*'...
В Linux можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.022 секунд. Запросов: 22.