2012-10-01 7 views
7

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?

+4

zmian „^ r * g $” na „^ r * g $.” – iruvar

+0

Chociaż można umieścić '$' na końcu podwójnym cudzysłowie , byłoby o wiele lepiej napisać to pojedynczym cudzysłowem: '^ r. * g $' ' –

+0

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. –

Odpowiedz

10

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 
0

* jest pasujący na r, a nie "coś pomiędzy nimi". Zaktualizować ją do .* i powinieneś zobaczyć wyniki:

egrep -e "^r.*g$" testfile.txt 
Powiązane problemy