Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-08-31 13:27:14

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

grep -o z zachowaniem formatu lini

Hej,

Jakis czas temu mialem zadanko w postaci znajdz tylko jakis regex w pliku. No ok to grep -o. Ale okazalo sie ze to wywala kazde znalezisko do nowej lini. Regex to byly liczby ktore nalezalo posumowac per linia. Ale w lini byly tez inne syfy np daty.

Wiec zadanie brzmi: znajdz w kazdej lini liczbe tak aby mozna je potem wysumowac w liniach.

W liniach tez byly daty wiec tez liczby. Moj regex to \ [0-9]{,3}\.[0-9]{,2};

Rozwiazalem to na opak czyli wywal 'syf'. W ten sposob zostaly mi liczby w liniach. Zastanawiam sie jednak czy jest cos takie co by mi rowiazalo problem i bylo ladne. Jakis sed -o. Wiem ze jest sed -n '//p' ale to mi nie chcialo cos dzialac.

Nie pogardze awk ale wole sedy i inne. Moze grep ma jakias opcje co nie bedzie wywalac do nowej linii?

Z gory dzieki
Pozdro


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#2  2014-08-31 15:53:05

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: grep -o z zachowaniem formatu lini

pierwszy wynik w googlu pod hasłem "grep dotall".
ogólnie musisz przełączyć grepa w tryb perl-regexp i tam bawić się opcjami w samym wyrażeniu.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#3  2014-08-31 20:00:00

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: grep -o z zachowaniem formatu lini

Tak myslalem ze perl bedzie lekarstwem. Dzieki za info. Zastanawia mnie co by mialo znaczyc to dotall ale jutro moze jak poszperam to zrozumiem.


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#4  2014-09-01 09:12:11

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: grep -o z zachowaniem formatu lini

nie "perl będzie lekarstwem" tylko przełączenie grepa w tryb kompatybilności z wyrażeniami regularnymi perla (co z samym perlem nie ma absolutnie nic wspólnego).
Co do "dotall"... warto poznać postawy działania wyrażeń regularnych oraz terminologię, zanim się spróbuje napisać swojego pierwszego regexpa.
Inaczej: "dotall" znaczy "dot all" - już rozumiesz?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#5  2014-09-01 11:19:25

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: grep -o z zachowaniem formatu lini

Wiesz jak tak patrze w necie na to co napisales to chyba kompletnie mnie nie zrozumiales. Przyklad

Kod:

2014-01-02 123.12; 2013-03-23 12.23;
2014-02-31 143.23; 2012-02-01 123.23; 2012-02-01 13.12;

Chce

Kod:

123.12; 12.23;
143.23; 123.23; 13.12;

I sory ale przelaczenie w tryb zgodny z perlem oznacza ze bez perla sie nie obejdzie. Jego jako narzedzia nie ale on sam sie do tego przyczynil. Musial zaistniec na swiecie.


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#6  2014-09-01 11:37:27

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: grep -o z zachowaniem formatu lini

w sumie wydaje mi się, że grepem tego nie zrobisz (nie do tego służy). sed, awk - owszem. w perlu czy pythonie to w ogóle nie ma o czym mówić... ale użycie właściwych narzędzi do osiągnięcia konkretnego celu powinno być priorytetem. owszem, można wbijać gwoździe kombinerkami ale po co się męczyć, jeśli obok leży młotek?
btw. nie "zgodny z perlem" a "zgodny z dialektem wyrażeń regularnych używanych w perlu" - jak by nie patrzeć, duża różnica. przy czym -o dziwo - perl używa nieco innej składni ;)
a w ogóle to na początku był snobol :D


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#7  2014-09-01 18:22:59

  admetus - Użytkownik

admetus
Użytkownik
Zarejestrowany: 2014-07-09

Re: grep -o z zachowaniem formatu lini

Dokumentacja grepa w przejrzysty i oczywisty sposób informuje o zachowaniu w przypadku korzystania z opcji "--only-matching".
"Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line."

Identycznie zachowuje się pcregrep.
"...If there is more than one match in a line, each of them is shown separately..."

Grep nie ma być zamiennikiem sed-a lub awk-a.

Offline

 

#8  2014-09-03 21:29:44

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: grep -o z zachowaniem formatu lini

Come on! Kurcze Panowie, co jest?!? Gdzie ja napisałem że to musi być grep? :D

/me napisał(-a):

Nie pogardze awk ale wole sedy i inne. Moze grep ma jakias opcje co nie bedzie wywalac do nowej linii?

Napisałem o grepie bo ma tą opcje -o co najłatwiej mi było wytłumaczyć o co chodzi... Tak mi się wydawało.

Może jest ktoś na sali kto miałby jakieś rozwiązanie? Tak z ciekawości poznałbym coś nowego.

Pozdr


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#9  2014-09-03 22:11:38

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: grep -o z zachowaniem formatu lini

W jakim języku to chcesz zakodzić?

Pytam, bo w miarę spójne API ma biblioteka pcre, która dostarcza też takie programy:

Kod:

qlist libpcre | grep bin
/usr/bin/pcre-config
/usr/bin/pcretest
/usr/bin/pcregrep

Może to się przyda?


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#10  2014-09-04 06:55:06

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: grep -o z zachowaniem formatu lini

Ogolnie im prostrze tym lepiej czyli na poczatek te bashowe znane. Sed awk grep tr cut i inne... jak se ne da to jakies mniej znane czyli to co podales np. Nie intetesuja mnie kobyly typu phyton czy perl bo rownie dobrze moge na pisac program w C do tego... nawet z gui. ;-)

@Jacekalex dzieki. Bede patrzec na to narzedzie.


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#11  2014-09-04 15:23:29

  admetus - Użytkownik

admetus
Użytkownik
Zarejestrowany: 2014-07-09

Re: grep -o z zachowaniem formatu lini

Przecież w tym swoim przykładzie już zaprzęgłeś regexp do roboty z grepem.
W przypadku seda nie różni się to:

sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} //g' < input
lub
sed -r 's/[0-9]{4}-[0-9]{2}-[0-9]{2} //g' < input

Offline

 

#12  2014-09-04 19:46:22

  P@blo - Nadworny matematyk

P@blo
Nadworny matematyk
Skąd: Wrocław v Jasło
Zarejestrowany: 2010-11-11

Re: grep -o z zachowaniem formatu lini

admetus napisał(-a):

Przecież w tym swoim przykładzie już zaprzęgłeś regexp do roboty z grepem.
W przypadku seda nie różni się to:

sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} //g' < input
lub
sed -r 's/[0-9]{4}-[0-9]{2}-[0-9]{2} //g' < input

Ja j*bie... Ręce mi opadają...

/me napisał(-a):

Rozwiazalem to na opak czyli wywal 'syf'. W ten sposob zostaly mi liczby w liniach.

Czyli dokładnie to co ty zrobiłeś. To po co ja do licha piszę na forum? Czekaj czekaj...

/me napisał(-a):

Zastanawiam sie jednak czy jest cos takie co by mi rowiazalo problem i bylo ladne. Jakis sed -o. Wiem ze jest sed -n '//p' ale to mi nie chcialo cos dzialac.

Aaa! Popatrz... Ładne oznacza w tym przypadku logiczne. Wiem co chce wyłapać i tego mam regex, a nie cały pozostały syf, który nie mam pojęcia jak może wyglądać. Gdy masz duży txt nie możesz mieć pewności, że 'syf' będzie _zawsze_ takiej postaci jak podałeś. KPW? ;)


ThinkPadX220i
| Procesor: Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz |
|  Debian: sid   |   Arch: amd64   |   Sound: alsa   |
| No DE | WM: DWM  |  DM: .bash_profile  |  BIOS+MBR |

Offline

 

#13  2014-09-04 20:58:49

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: grep -o z zachowaniem formatu lini

to napisz to wreszcie w c - szybsze będzie a i regexpów nie trzeba...


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)