Portál AbcLinuxu, 9. května 2025 23:46

Dotaz: regulární výraz pro grep

14.3.2012 15:12 Petr
regulární výraz pro grep
Přečteno: 675×
Odpovědět | Admin
Dobrý den, prosím vás, jak by měl vypadat regulární výraz pro grep, aby bral jenom řádky které obsahují {A,B,C}-{1,2,3}. (tedy A-1 nebo A-2 nebo A-3 nebo B-1 nebo B-2 atd)

find adresar | grep regular

Děkuji za odpověď

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Prcek)
14.3.2012 15:32 neklan | skóre: 11 | blog: neklan_no_clan
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Odpovědět | | Sbalit | Link | Blokovat | Admin
grep "[A,B,C]\-[1,2,3]"
14.3.2012 16:20 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Děkuju, funguje perfektně. Chyběl mně tam znak "\".
Tarmaq avatar 14.3.2012 17:45 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: regulární výraz pro grep
jeste bych doplnil ze to je mozne pouzit i bez grepu, kdyz uz se hleda findem:
find adresar -name "[A,B,C]\-[1,2,3]"
Don't panic!
Řešení 3× (Prcek, Vojtěch Horký, moo)
David Watzke avatar 14.3.2012 20:18 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Tohle je špatně. Projde tím i řetězec ",-,". Správně to má být takto:
grep "[ABC]\-[123]"
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
15.3.2012 11:46 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
grep "[ABC]\-[123]" Neprojde tímto i řetězec jako "AB-1" nebo "ABC-23" apod.?
David Watzke avatar 15.3.2012 11:53 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Ne, neprojde. Nic proti, ale nebylo by rychlejsi si to zkusit, nez se ptat? :-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
15.3.2012 12:23 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Byl jsem připojený z mobilu v buse.
25.3.2012 16:48 Pavel
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Dobrý den, chtěl bych se zeptat, proč mi nefunguje následující konstrukce:

grep -E "(jedna|dve|tri)\-(ab|cd|ef)|(ctyri|pet)\-(gh)"

Vytvoří se pouze kombinace jedna-ab, jedna-cd,... ale ne ctyri-gh. V čem může být problém? Děkuji.
Tarmaq avatar 29.3.2012 13:42 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: regulární výraz pro grep
mne to funguje:
$ cat foo
jedna-ab
dve-cd
jedna-cd
ctyri-gh
ctyri-ij
pet-gh
tri-ef
pet-cd

$ grep -E "(jedna|dve|tri)\-(ab|cd|ef)|(ctyri|pet)\-(gh)" foo
jedna-ab
dve-cd
jedna-cd
ctyri-gh
pet-gh
tri-ef
Don't panic!
14.3.2012 19:15 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste bych se chtěl zeptat na jednu věc. Čím se prosím vás dá kontrolovat jestli složka neobsahuje vícensobné pevné odkazy. Pro kontrolu symbolických jednoduše find -type l, existuje něco podobného i na pevné odkazy.

Děkuji za odpověď.
David Watzke avatar 14.3.2012 20:24 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Je zde přepínač -links, který bere jako argument počet odkazů. Takže když ho znegujete pomocí ! a budete hledat pouze soubory, tak to najde to, co chcete.
find . -not -links 1 -type f
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
15.3.2012 15:40 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Odpovědět | | Sbalit | Link | Blokovat | Admin
prosím vás ještě, když mám:find . | grep "auto\-[audi,skoda]", neměl by grep vybrat jen ty řádky, které obsahují řetězec "auto-audi" nebo "auto-skoda" ? Někde mám chybu, grep mi vybere i ty řádky, kde je řetěcez např. "auto-bmw". Jak by to bylo spráně? Děkuji.
David Watzke avatar 15.3.2012 15:57 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Ten vyraz mate spatne, ma vypadat takto: "auto\-(audi|skoda)". Kulate zavorky udavaji vycet retezcu a hranate vycet znaku.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
15.3.2012 16:04 Petr
Rozbalit Rozbalit vše Re: regulární výraz pro grep
find adresar | grep "auto\-(audi|skoda)" mně nenajde nic, ikdyž soubory s nazvem auto-audi, auto-skoda existují ve slozce "adresar"
Tarmaq avatar 15.3.2012 16:16 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: regulární výraz pro grep
jedna se totiz o extended regexp, tzn. pouzit prepinac -E:
find adresar | grep -E "auto\-(audi|skoda)"
btw mozna kdybys na zacatku misto formatu A-1, B-2 uvedl ze te nezajimaji jen jednoznake casti nazvu souboru, ale rovnou cela slova, usetril by sis (i nam) hodne casu..
Don't panic!
David Watzke avatar 15.3.2012 16:16 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Takovy vyraz je potreba predat grepu s prepinacem -E nebo escapovat zavorky a pak je mozne prepinac vynechat.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
25.3.2012 16:49 Pavel
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Dobrý den, chtěl bych se zeptat, proč mi nefunguje následující konstrukce:

grep -E "(jedna|dve|tri)\-(ab|cd|ef)|(ctyri|pet)\-(gh)"

Vytvoří se pouze kombinace jedna-ab, jedna-cd,... ale ne ctyri-gh. V čem může být problém? Děkuji.
David Watzke avatar 25.3.2012 17:08 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: regulární výraz pro grep
Podle me je potreba ty celky oddelene znakem | ozavorkovat.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.