Muszę znaleźć i wyświetlić linie w powłoce, używając egrep, które zaczynają się od r i kończą na g.egrep linie zaczynające się na r i kończące się na g
Mam
egrep -e "^r*g$" testfile.txt
ale to nie daje mi żadnych wyników, co robię źle?
Muszę znaleźć i wyświetlić linie w powłoce, używając egrep, które zaczynają się od r i kończą na g.egrep linie zaczynające się na r i kończące się na g
Mam
egrep -e "^r*g$" testfile.txt
ale to nie daje mi żadnych wyników, co robię źle?
dodanie .
powinien działać
egrep -e "^r.*g$"
To w zasadzie oznacza: wszystko, co zaczyna się od R, następnie, po której następuje zero lub więcej czegokolwiek, a potem kończy się g.
testowane przed
r fsgdfs gfsdg
fooo bar
rfoo g
fdsqfdsq
rg
zwraca
r fsgdfs gfsdg
rfoo g
rg
*
jest pasujący na r
, a nie "coś pomiędzy nimi". Zaktualizować ją do .*
i powinieneś zobaczyć wyniki:
egrep -e "^r.*g$" testfile.txt
zmian „^ r * g $” na „^ r * g $.” – iruvar
Chociaż można umieścić '$' na końcu podwójnym cudzysłowie , byłoby o wiele lepiej napisać to pojedynczym cudzysłowem: '^ r. * g $' ' –
Mylicie wyrażenia regularne z wzorcami dopasowania (" globbing ") używanymi przez powłokę. W wyrażeniu regularnym '.' dopasowuje pojedynczy znak, a'. * 'Dopasowuje zero lub więcej znaków; we wzorcu pasującym do pliku, to '?' i '*', a '.' nie jest specjalne. Wzorce dopasowania plików są mniej wydajne, ale wydają się być wygodniejsze z uwagi na ich ograniczony zakres wyboru plików. –