„Unix grep regex“, kuriame yra „x“, bet nėra „y“

Unix grep, kur yra, pvz., Alfa, bet be beta, nereikia vieno leidimo.

 grep 'alpha' <> | grep -v 'beta' 
38
19 мая '11 в 21:33 2011-05-19 21:33 Wilderness yra nustatytas gegužės 19 '11, 21:33 2011-05-19 21:33
@ 5 atsakymai

^((?!beta).)*alpha((?!beta).)*$ , manau, tai padarys.

17
19 мая '11 в 21:36 2011-05-19 21:36 atsakymas pateikiamas p. 47, gegužės 11 d., „11, 21:36 2011-05-19 21:36

Kiti atsakymai čia rodo kai kuriuos būdus, kuriais galite susiaurinti įvairias regexpo parinktis, nors manau, kad paaiškėja, kad apskritai atsakymas yra „nedarykite“. Tokios reguliarios išraiškos yra daug sunkiau perskaityti ir, greičiausiai, lėtesnės, nei paprasčiausiai derinant dvi reguliarias išraiškas naudojant bet kurios naudojamos kalbos logiką. Jei naudojate „ grep komandą „Unix“ komandinėje eilutėje, tiesiog perduokite vieno iš jų rezultatus kitam:

 grep "alpha" | grep -v "beta" 
border=0

Visą laiką naudoju šį dizainą, kad gautų pernelyg didelius grep rezultatus. Jei turite idėją, kuri rezultato rinkinys bus mažesnis, įdėkite jį į dujotiekį, kad gautumėte maksimalų našumą, nes antroji komanda turi apdoroti išvestį tik iš pirmojo ir ne viso įvesties.

28
19 мая '11 в 23:20 2011-05-19 23:20 atsakymas pateikiamas nohat gegužės 19 d., 11 val. 23:20 2011-05-19 23:20

Na, kaip mes visi siunčiame atsakymus, čia tai yra awk; -)

 awk '/x/  !/y/' infile 

Tikiuosi, kad tai padės.

22
19 мая '11 в 21:41 2011-05-19 21:41 atsakymas pateikiamas kuberiui gegužės 19 d., 11 val. 21:41 2011-05-19 21:41

Esu įsitikinęs, kad tai neįmanoma naudojant tikras reguliarias išraiškas. Pavyzdys [^y]*x[^y]* atitiktų yxy, nes * leidžia nulinį ar daugiau ne y atitikmenų.

EDIT:

Tiesą sakant, tai veikia: ^[^y]*x[^y]*$ . Iš esmės tai reiškia "atitikimą bet kuriai eilutei, pradedant nuo nulio ar daugiau simbolių, išskyrus y, tada turi x, o tada baigiasi nuliu ar daugiau nei y simbolių."

3
19 мая '11 в 21:38 2011-05-19 21:38 atsakymą pateikė Shea Levy , gegužės 19 d. 11 d., 21:38 2011-05-19 21:38

Pabandykite naudoti išimties pareiškimą: [^y]*x[^y]*

0
19 мая '11 в 21:36 2011-05-19 21:36 atsakymas pateikiamas blogybė 19 d. 11 val. 21:36 2011-05-19 21:36

Kiti klausimai apie žymes arba Užduoti klausimą