GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit Grep s více a vzory?

Chtěl bych získat shodu více vzorů s implicitním AND mezi vzory, tj. ekvivalentní spuštění několika greps v sekvenci:

grep pattern1 | grep pattern2 | ...

Jak to tedy převést na něco podobného?

grep pattern1 & pattern2 & pattern3

Chtěl bych používat single grep, protože dynamicky stavím argumenty, takže se vše musí vejít do jednoho řetězce. Použití filtru je systémová funkce, nikoli grep, takže to není argument.

Nezaměňujte tuto otázku s:

grep "pattern1|pattern2|..."

Toto je NEBO shoda více vzorů.

Přijatá odpověď:

agrep můžete to udělat pomocí této syntaxe:

agrep 'pattern1;pattern2'

S GNU grep , když je vytvořen s podporou PCRE, můžete:

grep -P '^(?=.*pattern1)(?=.*pattern2)'

S ast grep :

grep -X '.*pattern1.*&.*pattern2.*'

(přidáním .* s jako <x>&<y> odpovídá řetězcům, které odpovídají oběma <x> a <y> přesně , a&b by se nikdy neshodovaly, protože neexistuje žádný takový řetězec, který by byl oba a a b ve stejnou dobu).

Pokud se vzory nepřekrývají, můžete také provést:

grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1'

Nejlepší přenosný způsob je pravděpodobně s awk jak již bylo zmíněno:

awk '/pattern1/ && /pattern2/'

Pomocí sed :

sed -e '/pattern1/!d' -e '/pattern2/!d'

Mějte prosím na paměti, že všechny tyto budou mít jinou syntaxi regulárního výrazu.


Linux
  1. Jak spárovat vzory bez rozlišení malých a velkých písmen s Ls?

  2. Jak najít více řetězců v souborech?

  3. Jak spustit více verzí PHP s Nginx na Ubuntu?

  1. Jak se popasovat s barevným výstupem

  2. Jak spustit více procesů Tor najednou s různými výstupními IP?

  3. Jak grep ps výstup s hlavičkami

  1. Jak grepovat pro více řetězců, vzorů nebo slov

  2. Jak spouštět kontejnery jako službu Systemd s Podmanem

  3. grep dvojice vzorů a souboru