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


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

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

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

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

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

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

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

Оффлайн kdt

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

Оффлайн ALiEN175

  • Администратор
  • Старожил
  • *
  • Сообщений: 6246
  • Vamos a Bailar
    • Просмотр профиля
grep -oe "MAC=\S*|DST=\S*"
AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
ACER 5750G :: Intel Core i5-2450M @ 2.50GHz :: 6 GB DDR3 :: GeForce GT 630M :: 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

  • Администратор
  • Старожил
  • *
  • Сообщений: 6246
  • Vamos a Bailar
    • Просмотр профиля
kdt, точно, E - большая.  Перепутал маленько ;)
Спасибо.
AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
ACER 5750G :: Intel Core i5-2450M @ 2.50GHz :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

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

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

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

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

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

Оффлайн 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/'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

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

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

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


 

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