Wyszukanie w pliku (linux,grep -E)

2018-11-08 11:59
0

Witam,
Mam problem z paroma zadaniami do wykonania w linuxie.
Korzystając z grep -E w pliku znajdź linie zawierające:

  1. (dokładnie) dwa znaki C z rzędu
  2. liczbę dwucyfrową
  3. niepusty łańcuch ujęty w cudzysłów
  4. zakończone kropką, nieskładające się z samej kropki
  5. łańcuchy postaci dddd-dd-dd, gdzie d jest cyfrą, ale drugie pole mieści się w przedziale 01-12 lub 1-12

Czy mógłby ktoś mi pomóc?

edytowany 1x, ostatnio: furious programming, 2018-11-08 14:43

Pozostało 580 znaków

2018-11-08 12:08
0

A co już zrobiłeś i w czym konkretnie masz problem? Przeczytałeś już coś o wyrażeniach regularnych, np. man-a od grepa?

Pozostało 580 znaków

2018-11-08 12:36
0

Tak, mam już większość innych zadań zrobionych, tylko nie mogę do tych paru sformułować odpowiedzi.
Takie podobne mam:

  • zawierającę co najmniej dwie cyfry z rzędu:
    grep -E '[0-9]{2}' regex.txt
  • zawierające (co najmniej) dwa znaki 'C' z rzędu,
    grep -E 'C{2}' regex.txt
  • zakończone kropką,
    grep -E '\.$' regex.txt  #Tylko tu też coś nie działa
  • łańcuchy postaci dddd-dd-dd, gdzie 'd' jest cyfrą, gdzie drugie pole mieści się w przedziale 01-12 (i ma dwie cyfry),
    grep -E '\<[0-9]{4}-[0-1][1-9][0-9]{2}'>' regex.txt
edytowany 1x, ostatnio: furious programming, 2018-11-08 14:44
2018-11-08 12:42

W tym z kropką Ci nie działa, bo kropka w wyrażeniach regularnych oznacza „dowolny znak”, a nie kropkę. Zatem musisz ją wyescape’ować: '\.$'

W tym ostatnim łapiesz także miesiące o numerze 15 czy 19, a nie łapiesz tego o numerze 10. Tutaj musisz nie składać z dwóch cyfr, tylko użyć referencji wstecznych (punkt 3.5 z mojego linka wyżej).

EDYCJA: dopiero teraz zauważyłem, że te rozwiązane są podobne, a nie takie same. Zatem:

  1. Dokładnie dwa wystąpienia C — to po prostu CC.
  2. Liczba dwucyfrowa to dwie cyfry — \d\d.
  3. Niepusty łańcuch ujęty w cudzysłów, to cudzysłów wokół niepustego ciągu znaków — \"\w+\"
edytowany 1x, ostatnio: Althorion, 2018-11-08 12:48

Pozostało 580 znaków

2018-11-08 12:56
0

A jak wyszukać łańcuch ujęty w cudzysłów?
I nie wiem dlaczego ale \.$ nie daje żadnego wyniku.

edytowany 1x, ostatnio: furious programming, 2018-11-08 14:44

Pozostało 580 znaków

2018-11-08 13:06
0

Łańcuch ujęty w cudzysłów to łańcuch (czyli co najmniej jeden znak alfanumeryczny, czyli \w+) ujęty w cudzysłów.

I prawdę mówiąc też nie wiem, .$ powinna znajdować dowolny znak (.) na końcu linii ($).

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0