Linux polecenie grep (Pomoc)

Czy jest ktoś w stanie rozwiązać to zadanie i wytłumaczyć mi dlaczego właśnie ta odpowiedź jest dobra ?Odpowiedz%20004

Nie znam się ale się wypowiem. Grep jako takie takie było kiedyś do szukania(uratowało mi dupę kilka razy) jeszcze chyba pochodzi z lat 70-tych. Tutaj chyba wytłumaczyli ten egrep jako przestarzały:
https://manpages.ubuntu.com/manpages/bionic/pl/man1/grep.1.html

1 polubienie

Szybkie sprawdzenie pokazuje, że odpowiedź “b” też jest dobra. Dlaczego a?

Część grep ‘student[^4-9]’ pokazuje ciąg znaków “student” z jakimikolwiek znakami po ciągu oprócz znaków z zakresu 4 do 9. Część grep -v ‘student1[02]’ wybiera linie niepasujące do wzoru (man grep | less -p ‘–invert-match’) (zaprzeczenie inaczej zapisane), a konkretnie do wzoru nie pasuje ciąg znaków student1 ze znakiem 0 lub 2 na miejscu drugim.

Przestarzałe egrep jest równoważne z zapisem grep -E, co oznacza, że program korzysta z rozszerzonych wyrażeń regularnych i o nich musisz poszukać informacji:
https://www.boost.org/doc/libs/1_38_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html .

3 polubienia

A więc a i b są prawidłowymi odpowiedziami ? Mam jeszcze jedno pytanie dotyczące punktu ‘‘b’’, co oznacza ‘’$’’ za nawiasem ?

To jak z testami na prawo jazdy, kierowanie się rozumem niczego nie daje. Może byc A, B albo ABC

Koniec “linii” / “zmiennej”.

Tak by nie znalazło “student1c” (czyt. studenta1c).

I tu mi popsułeś samopoczucie. Link świetny. Jako laik używałem grep do prostych rzeczy, a okazuje się, że może więcej.
Chociaż teraz omijam konsolę i klikam :slight_smile:

Dzięki wielkie za pomoc!

Checkboksy są po to, aby dać możliwość wielokrotnego wyboru, czyli prawidłowych odpowiedzić może być więcej, niż jedna.

Dlaczego obie są poprawne? Pierwszą wytłumaczono już wyżej. Druga ma sprawdzić 4 dopasowania.

Pewnie jeszcze wyjdzie że każda ma poprawną składnie i to samo wyświetla by sprawdzić czy ktoś ogarnął jak filtrować.

Prawie wszystkie są prawidłowe :wink: Odpowiedzi a i e są niepoprawne, ponieważ mają wielokrotne rurkowanie, co oznacza, że filtrujesz wynik już przefiltrowany.

1 polubienie

Zadanie nie zabrania marnować czasu czy energii, no chyba że jedno filtrowanie spowoduje, że reszta wyników już nie może się pokazać bo obcięto zakres.

Może pokazać nieprawidłowy wynik. Toeretycznie z wyfiltrowanego wyniku próbuje filtrować kolejny wynik. Jeśli wynikiem jest wyrażenie zaczynające się od 4 do 9, to z tego wyniku nie ma możliwości wyciągnięcia wyrażenia pasującego do 0 i 2, tym bardziej odwrotnego. Wynik z polecenia a powinien zwrócić tylko wartości zawierające cyfry 4 do 9, druga rurka w tym przypadku jest zbędna, bo nic nie zwróci. Polecenie z odpowiedzi e nie zwróci wyników 1, 2, 3 i 11.

Jak tak patrzę kolejny raz, to wynik dadzą tylko c i d.

1 polubienie

Plik testowy:

Wyniki:

grep 'student[^4-9]' | grep -v 'student1[02]'

student1	tty1	2020-07-05 19:50
student2	tty2	2020-07-05 19:50
student3	tty3	2020-07-05 19:50
student11	tty11	2020-07-05 19:50
egrep 'student[^4-9]$|student1[^02]'

student1	tty1	2020-07-05 19:50
student11	tty11	2020-07-05 19:50
egrep 'student1|student2|student3|student11'

student1	tty1	2020-07-05 19:50
student2	tty2	2020-07-05 19:50
student3	tty3	2020-07-05 19:50
student10	tty10	2020-07-05 19:50
student11	tty11	2020-07-05 19:50
student12	tty12	2020-07-05 19:50
egrep 'student[1-3]|student11'

student1	tty1	2020-07-05 19:50
student2	tty2	2020-07-05 19:50
student3	tty3	2020-07-05 19:50
student10	tty10	2020-07-05 19:50
student11	tty11	2020-07-05 19:50
student12	tty12	2020-07-05 19:50
grep student1 | grep student2 | grep student3 | grep student11

puste wyjście

Dokładne sprawdzenie pokazuje, że gdy człowiek przy szybkim sprawdzeniu przepisuje z obrazka to umyka mu znak dolara $ :stuck_out_tongue_winking_eye: . Tylko ‘a’ jest prawidłowe, reszta kaszani jak sto diabłów :smiley:

4 polubienia

Najwyraźniej regexp w grep ma się inaczej, niż to co ja znam :wink: dobra robota :+1: