egrep и

Немного уточню
Логическое OR в grep
grep -E 'a|b' /file
или
egrep 'a|b' /file
Логическое AND в grep для 2-х символов
grep 'a' /file | grep 'b'
или
egrep 'a.*b' /file
Логическое AND в grep для 3-х символов
grep 'a' /file | grep 'b' | grep 'c'
или
egrep 'a.*b*c' /file
PS ... EDIT - забыл добавить AND для 2-х символов. И луше использовать egrep (или grep -E).
В принципе для grep AND нет - это просто иммитация.
Ошибки не исчезают с опытом - они просто умнеют
vasek,

echo 'bca' | egrep 'a.*b*c'
не работает
echo 'bca' | grep 'a' | grep 'b' | grep 'c'
работает
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja, не понял, что ты имеешь ввиду.
Привожу свои выводы .......... я привел иммитацию AND ...... оба варианта работают и выводы совпадают
cat ~/test
afjkb,mck
avfbdahyc
avvf
bcfgh
am,,cmhgblka
a
b
c
ab
bc
fghjajhcb
grep 'a' ~/test | grep 'b' | grep 'c'
afjkb,mck
avfbdahyc
am,,cmhgblka
fghjajhcb
egrep 'a.*b*c' ~/test
afjkb,mck
avfbdahyc
am,,cmhgblka
fghjajhcb
Ошибки не исчезают с опытом - они просто умнеют
vasek
Привожу свои выводы

grayich
да, проивзольный порядок

Если будет не
afjkb,mck
а
bfkjc.mak
уже не найдет
Absalon
уже не найдет
Верно подметил.
Всегда подходит этот вариант - grep 'a' ~/test | grep 'b' | grep 'c'
А вот этот вариант egrep 'a.*b*c' ~/test иммитирует AND, но пользоваться им нужно очень осторожно - зависит от того, что стоит на 1-ом месте и что конкретно нужно .... и лучше, конечно, его не использовать.
PS ... а если нужен произвольный вариант, то тогда такая конструкция (совмещение OR и AND) - egrep 'a.*b*c|b.a*c|c.a*b' ~/test - вроде подходит - но мне больше нравится 1-ый вариант - grep 'a' ~/test | grep 'b' | grep 'c'
Ошибки не исчезают с опытом - они просто умнеют
vasek
PS ... а если нужен произвольный вариант, то тогда такая конструкция (совмещение OR и AND) - egrep 'a.*b*c|b.a*c|c.a*b' ~/test - вроде подходит - но мне больше нравится 1-ый вариант - grep 'a' ~/test | grep 'b' | grep 'c'
Да проще без грепа, по моему
Absalon
Да проще без грепа, по моему
Это дело вкуса - каждая задача имеет несколько вариантов решений.
Ошибки не исчезают с опытом - они просто умнеют
Поигрался, меняя порядок букв и, как мне кажется, все ниже перечисленные команды дают одинаковый вывод, или у меня уже голова не варит
egrep 'a.*b*c' ~/test
egrep 'a.*b*c|b.a*c|c.a*b' ~/test
egrep 'a.*b*c|a.c*b|b.a*c|b.c*a|c.a*b|c.b*a' ~/test
в том числе и эта с awk
awk '/a.*b*c/' ~/test
Ошибки не исчезают с опытом - они просто умнеют
https://pastebin.com/c3KVF5Rj
У меня такой комбинации (типа aac) не было.
И получается, как и писал, команда grep 'a' ~/test | grep 'b' | grep 'c' работает всегда.
При использовании комбинации egrep 'a.*b*c' ~/test или awk '/a.*b*c/' ~/test нужно учитывать, что в тексте может встретится комбинация aac (вроде бы только эта комбинация не выходит, учитывая последовательность букв в запросе 'a.*b*c'), которую нужно исключить.
PS ... EDIT1 - не прав, есть и другие комбинации ....... и выходит, что лучше этой командой не пользоваться - не надежно.
И как все указали - остается одна, как наиболее надежная (конечно, можно капать и дальше, но, думаю, надежды нет)

EDIT2 ... забыл главное - всем спасибо - потренировал свои застоявшиеся мозги
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.