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


Автор Тема: Как вывести на экран только найденное? [Решено]  (Прочитано 335 раз)

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

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

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

Есть лог, из него, из каждой строки, нужно получить два столбца. awk не вариант, количество столбцов различное.
Могу так найти необходимое grep -e "MAC=\S*" -e "DST=\S*", выводится весь лог и красным выделено нужное.
А как получить только необходимое? Без всего лишнего?

Спасибо.
« Последнее редактирование: 17 Июнь 2020, 09:31:43 от zg_nico »

Оффлайн kdt

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Зависит от того, что нужно. Если нужно получить только подстроку из строки, то есть опция -o, но нужно установить "от" и "до" в паттерне поиска.

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4721
  • Capture the truth
    • Просмотр профиля
grep -oe "MAC=\S*|DST=\S*"
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Radeon R7 260X :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн kdt

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
grep -oe "MAC=\S*|DST=\S*"

-e разделяет варианты поиска, поэтому при использовании -e вставлять в паттерн пайп как разделить вариантов не нужно, для этого пишутся отдельные паттерны. Использование пайпа для разделения вариантов в одном паттерне происходит и без опции -e.
grep -o "MAC=\S*\|DST=\S*"или
grep -Eo "MAC=\S*|DST=\S*"

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4721
  • Capture the truth
    • Просмотр профиля
kdt, точно, E - большая.  Перепутал маленько ;)
Спасибо.
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Radeon R7 260X :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

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

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Получил, но все на новой строке

(Нажмите, чтобы показать/скрыть)

А есть вариант чтоб так получить?

(Нажмите, чтобы показать/скрыть)

Оффлайн kdt

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Для этого нужно задать один паттерн с одним вариантом и указать "от" и "до".
grep -o "MAC=\S* DST=\S*"

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
awk не вариант
Вы просто не умеете его готовить
вариант чтоб так
grep -Eo "MAC=\S*|DST=\S*" / paste - -
из него, из каждой строки
Лучше привеcти пример нескольких строкsed -r 's/.*(MAC=\S*).*(DST=\S*).*/\1\t\2/'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

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

  • Автор темы
  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Azure,
получил что хотел.
Всем большое спасибо.

(Нажмите, чтобы показать/скрыть)


 

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