Czy jest ktoś w stanie rozwiązać to zadanie i wytłumaczyć mi dlaczego właśnie ta odpowiedź jest dobra ?
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
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 .
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
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 Odpowiedzi a i e są niepoprawne, ponieważ mają wielokrotne rurkowanie, co oznacza, że filtrujesz wynik już przefiltrowany.
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.
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 $ . Tylko ‘a’ jest prawidłowe, reszta kaszani jak sto diabłów
Najwyraźniej regexp w grep ma się inaczej, niż to co ja znam dobra robota