Меню Рубрики

Linux grep несколько значений

Grep OR — Grep AND — Grep NOT — Несколько Условий

Самыми распространенными утилитами для парсинга файлов в Linux являются команды grep , egrep , sed и awk .

Из данной статьи вы узнаете, как выполнить поиск строк в файле по нескольким условиям, которые задаются логическими операторами OR , AND , NOT с помощью grep , egrep , sed и awk из командной строки в Linux.

Я приведу примеры того, как найти все строки в файле, соответствующие любому из нескольких условий (регулярных выражений), строки которые соответствуют каждому из перечисленных условий, а также как напечатать файл, исключив строки попадающие под указанное условие.

Дельный Совет: Поиск и валидация email адресов с помощью команды grep ! Лучшее регулярное выражение для поиска email адресов! Читать далее →

GREP OR: Любое Из Нескольких Условий

Поиск строк в файле, в которых содержится любое из перечисленных регулярных выражений.

Используя команду grep и egrep :

Используя команду awk :

Используя команду sed :

GREP AND: Каждое Из Условий

Также, очень часто возникает необходимость grep -нуть файл по нескольким условиям — это когда нужно найти все строки в файле, которые соответствуют каждому из нескольких регулярных выражений.

Обратите внимание, что вы можете осуществить поиск строк в файле которые содержат регулярные выражения, как в определенном, так и в произвольном порядке.

Используйте одну из приведенных ниже команд, чтобы найти и напечатать все строки в файле, которые соответствуют нескольким условиям.

Используя команду grep (в такой последовательности):

Используя команду grep (в любой последовательности):

Дельный Совет: На сервере закончилась память? Узнайте какой процесс съел всю RAM и SWAP! Одна строка на Bash для настоящих Linux админов! Читать далее →

Используя команду awk (в такой последовательности):

Используя команду awk (в любой последовательности):

Используя команду sed (в такой последовательности):

Используя команду sed (в любой последовательности):

GREP NOT: Исключение

Дельный Совет: Поиск и валидация IP адресов с помощью команды grep ! Лучшее регулярное выражение для поиска IP адресов Читать далее →

Поиск и печать строк из файла, которые не содержат указанное регулярное выражение.

Источник

Как грепнуть одновременно по нескольким условиям?

Вот есть лог файл.
Нужно grep-нуть его по нескольким условиям.
Типа встречается строка №1 или (строка №2 и строка №3).
В в случае когда просто строка #1: grep #1
Когда #2 и #3: grep #2 | grep #3
А как попроще организовать «или», т.е. объединить результаты этих 2х выражений ?
Ну вот так чтобы поменьше печатать и без регулярок.

вот было бы идеально: #1|(#2 & #3).
Я привел это как пример, на самом деле условия будут достаточно вложенными.

Ну я спрашиваю не чисто по grep, может есть более «умная» утилита.
А ваш пример:
grep -P ‘foo|bar|baz’

вообще не требует регулярок

grep -e foo -e bar -e baz

И как вы в терминах этой регулярки напишите мне условие:
bar или (baz и foo) ?

Сергей, алло) Флаг -e это тоже регулярное выражение, если что.)
А по поводу а || б&в

И как вы в терминах этой регулярки напишите мне условие:
bar или (baz и foo) ?

> Флаг -e это тоже регулярное выражение, если что.)
да я ж не спорю, если так посудить: grep baz тоже регулярка.

> Это условие нелогично, ибо мы не знаем, что подразумевается под «и». Строка «baz и foo»?
если вам что то не логично, то можно это уточнить.
А именно одновременное присутствие baz и foo в строке. Я кажется привел пример в вопросе,
но вы почему то не удосужились прочитать и понять это.

Если нужен разделитель — можно * на + поменять.

спасибо, но не то. Я именно хочу получить эквивалент

grep baz | grep bar

по вашей регулярке имеет значение местоположение относительно друг-друга.

Ок. Есть строка А, строка Б и В
нужно в логах найти все строки которые удовлетворяют правилу:
в строке лога присутствует строка А
или
одновременно присутствуют строки Б и В.

Я могу придумать миллион вариаций на эту тему.
Ну например:
в строке лога присутствует А
или
одновременно присутсвует Б и не присутсвует В.

Регулярки я и сам составлю. Все примеры которые приведены выше никак не покажут строки которые мне нужны. Ок положим вот так:
Есть файл: cat log

foo
bar baz
xxx yyy
baz bar foo
zzzz bar

Мне нужно выбрать все строки с foo или все строки одновременно с bar и baz (строго одновременно).
Как я поступлю с grep? вот команда которая решает мои задачи:
cat log | grep -e foo -e baz | grep -e foo -e bar

foo
bar baz
baz bar foo

но вы видите, это достаточно сложная команда. foo встречается 2 раза. А если я хочу более «заковыристое» условие, так я должен тогда еще больше пайпов писать + еще больше foo добавлять и т.п.
придет момент, когда я обычным grep так вообще не сделаю, я могу ошибится ит.п.
т.о. я спрашиваю как мне упростить все это дело так, чтобы я просто описал некое правило фильтрации (один раз) со всякими скобочками и приортетами операций, и получил на выходе то что мне нужно.
Т.е. в данном случае было бы идеально если бы мне дали сделать фильтр такой:
foo|(bar&baz)

Источник

подскажите как grep по двум условиям В СТРОКУ?

так конечно работает

здесь лучше два грепа, а не один

не, так тоже пробовал, строки разные в файле

два грепа не подходят — строки в разных частях файла, ищет почему то в одной строке

почему-то, интересно почему, может быть открыть исходный код?

вот и шта, файл из нескольких строк, греп почему то делает построчно поиск

исходный код чего? текста? ну типа так

а тебе нужен файл в котором просто есть два нужных слова?

да, нужно обе строки получить как при грепе по одному условию в строку

Возможны два варианта:
1) Найди все строки, в которых есть бла1 или бла2: egrep «бла1\|бла2»
2) Найди все строки, которые содержат и бла1 и бла2: egrep «бла1.*бла2\|бла2.*бла1» .

Научись технически грамотно задавать вопрос. Мне уже даже неинтересно стало. Задача элементарная

так все находится, но получается для каждого условия отдельная строка

все элементарно и написал

Написал бы технически грамотно, здесь бы не было этих никому не нужных советов с одним грепом

Так? (для одного файла)

точно! но нужно для списка файлов, читаю за paste

вот такая штука почти прокатывает, но лишнее имя файла торчит

точно! но нужно для списка файлов, читаю за paste

P. S. Если файлы только из текущего каталога, find излишен. Но я не знаю деталей твоего кейса.

Писал бы уже целиком на перле

Нет, такой никнейм не прокатит как отговорка

Не советуй дурного.

Я только однострочники умею на пёрле.

А что должен выводить скрипт с паттерном «one\|two» для такого файла?

Даа, лучше бдсмить бинутилсы же. Сколько лет читаю такие треды, все недоумеваю, почему люди не могут просто взять любой элементарный яп, забрать стпоки из файлов в нормальные структуры данных и делать с ними что душе угодно. Даже если у человека сложности с алгоритмированием, все ваши пастогрепоседоавки можно было сделать модулем на яп и никогда не парить себе мозг, но вы уплетаете непотребное стд легаси, созданное для ручного ввода с консоли, когда больше вообще нихрена не было, и кормите им людей. Чем-то похоже на работу верстальщика css – есть куча мелких блоков, которые не делают что нужно, но если вложить 4 штуки и прописать 50 свойств, то получается почти что надо, осталось только px вручную подобрать. Или как целиком на sql-е пишут бизнес-логику, копируя целые трехстраничные запросы по пять раз в третий уровень вложения, потому что нет элементарного препроцессора или разделения на функции.

На яп задача решается так: идешь по файлам тек.папки, идешь по строкам, если /а|б/, то кладешь строку в массив. Потом массив добиваешь до четного и попарно соединяя, добавляешь имя файла, принтишь. Всё, никаких недокостылей, а с хорошей файл-либой будет строк 10 от силы.

s/бинутилсы/кореутилсы/, все время путаю

Сколько лет читаю такие треды, все недоумеваю, почему люди не могут просто взять любой элементарный яп, забрать стпоки из файлов в нормальные структуры данных и делать с ними что душе угодно.

Шелл в *nix это и есть ЯП, а не как в венде какое-то говно.

На яп задача решается так: идешь по файлам тек.папки, идешь по строкам, если /а|б/, то кладешь строку в массив. Потом массив добиваешь до четного и попарно соединяя, добавляешь имя файла, принтишь.

Да, на шелле элементарно можно написать такой однострочник.

Всё, никаких недокостылей, а с хорошей файл-либой будет строк 10 от силы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Mac os очистка и оптимизация
  • Mac os очень долго загружается
  • Mac os отображение скрытых папок
  • Mac os отключить сон
  • Mac os отключить режим сна