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 [tt]\ [0-9]{,3}\.[0-9]{,2};[/tt]

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


[tt]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 |[/tt]

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!
[i]Zespół Adwokacki Dyskrecja[/i]

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.


[tt]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 |[/tt]

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!
[i]Zespół Adwokacki Dyskrecja[/i]

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.


[tt]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 |[/tt]

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!
[i]Zespół Adwokacki Dyskrecja[/i]

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

[quote=/me]Nie pogardze awk ale wole sedy i inne. Moze grep ma jakias opcje co nie bedzie wywalac do nowej linii?[/quote]
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


[tt]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 |[/tt]

Offline

 

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

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
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.


[tt]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 |[/tt]

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

[quote=admetus]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[/quote]
Ja j*bie... Ręce mi opadają...
[quote=/me]Rozwiazalem to na opak czyli wywal 'syf'. W ten sposob zostaly mi liczby w liniach.[/quote]
Czyli dokładnie to co ty zrobiłeś. To po co ja do licha piszę na forum? Czekaj czekaj...
[quote=/me]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.[/quote]
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? ;)


[tt]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 |[/tt]

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!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.012 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00008 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00133 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.220.206.141' WHERE u.id=1
0.00127 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.220.206.141', 1732482839)
0.00044 SELECT * FROM punbb_online WHERE logged<1732482539
0.00086 DELETE FROM punbb_online WHERE ident='18.221.27.56'
0.00056 SELECT topic_id FROM punbb_posts WHERE id=274696
0.00182 SELECT id FROM punbb_posts WHERE topic_id=26342 ORDER BY posted
0.00097 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26342 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00137 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26342 ORDER BY p.id LIMIT 0,25
0.00109 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26342
Total query time: 0.00989 s