BASH wyrażenia regularne grepa

Potrzebujesz pomocy z C, C++, perl, python, itp.
piter
Beginner
Posty: 128
Rejestracja: 09 lutego 2008, 12:45

Post autor: piter »

A jeśli chodzi o ten czas działania:

Kod: Zaznacz cały

wc -l plik.txt 
10000 plik.txt

Kod: Zaznacz cały

head --lines=3 plik.txt
12-12-80
12-12-1754
12-12-1335

Kod: Zaznacz cały

time awk -F: 'BEGIN {FS=" "} {d[0]=0; split($1,d,"-"); if (d[3] <= 1974 && d[3] >= 1000) print $0}' plik.txt > NULL

real    0m0.056s
user    0m0.052s
sys     0m0.000s

Kod: Zaznacz cały

time perl -lne '/\d{1,2}-\d{1,2}-(\d{1,4})/;print if $1 >=1000 && $1 <= 1974' plik.txt > NULL

real    0m0.069s
user    0m0.064s
sys     0m0.004s

Kod: Zaznacz cały

time grep -e "^[^-]*-[^-]*-1[0-8][0-9][0-9]\|^[^-]*-[^-]*-19[0-6][0-9]\|^[^-]*-[^-]*-197[0-4]" plik.txt > NULL

real    0m0.077s
user    0m0.072s
sys     0m0.004s

Kod: Zaznacz cały

time (grep -e "^[^-]*-[^-]*-1[0-8][0-9][0-9]" plik.txt; grep -e "^[^-]*-[^-]*-19[0-6][0-9]" plik.txt; grep -e "^[^-]*-[^-]*-197[0-4]" plik.txt) > NULL

real    0m0.083s
user    0m0.072s
sys     0m0.012s
Inkluder
Posty: 7
Rejestracja: 17 grudnia 2010, 15:28

Post autor: Inkluder »

piter pisze:Moim zdaniem przy pomocy samego grepa nie da się tego zrobić. Grep służy tylko do wypisywania linii pasujących do wzorca. Do tego typu edycji tekstu służą inne narzędzia np. sed.

Jestem tego samego zdania, ale mam zadanie w którym mogę użyć tylko grep, head, tail, tr, cut i nie wiem jak za pomocą tych programów podzielić htmla. Jakieś pomysły?
Awatar użytkownika
grzesiek
Junior Member
Posty: 932
Rejestracja: 06 stycznia 2008, 10:41
Lokalizacja: Białystok

Post autor: grzesiek »

piter pisze:A jeśli chodzi o ten czas działania:

Kod: Zaznacz cały

wc -l plik.txt 
10000 plik.txt

Kod: Zaznacz cały

head --lines=3 plik.txt
12-12-80
12-12-1754
12-12-1335

Kod: Zaznacz cały

time awk -F: 'BEGIN {FS=" "} {d[0]=0; split($1,d,"-"); if (d[3] <= 1974 && d[3] >= 1000) print $0}' plik.txt > NULL

real    0m0.056s
user    0m0.052s
sys     0m0.000s

Kod: Zaznacz cały

time perl -lne '/\d{1,2}-\d{1,2}-(\d{1,4})/;print if $1 >=1000 && $1 <= 1974' plik.txt > NULL

real    0m0.069s
user    0m0.064s
sys     0m0.004s
ach ten brak wstecznych referencji w AWK ;)

Inkluder my tu nie rozwiązujemy zadań domowych itp. zapytaj profesora.
Przynajmniej ja nie mam zamiaru szukać rozwiązań nie służących do niczego w praktyce itp....
Inkluder
Posty: 7
Rejestracja: 17 grudnia 2010, 15:28

Post autor: Inkluder »

grzesiek pisze:ach ten brak wstecznych referencji w AWK ;)

Inkluder my tu nie rozwiązujemy zadań domowych itp. zapytaj profesora.
Przynajmniej ja nie mam zamiaru szukać rozwiązań nie służących do niczego w praktyce itp....
Jeśli nie masz nic ciekawego do dodania, to proszę cię znajdź sobie inny temat do spamowania. I nie pisz za wszystkich użytkowników tego forum, nie wszyscy są egoistami...
fnmirk
Senior Member
Posty: 8321
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Inkluder, spokojnie.

Swoją drogą to zajrzałbyś do:

Kod: Zaznacz cały

man grep
man head
man tail
man tr
man cut
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

grzesiek, jednak przedkładam wygodę (przynajmniej dla mnie), nad te kilkanaście procent więcej czasu w oczekiwaniu na wynik. A może to po prostu przez to, że najpierw poznałem dobrze perla, a dopiero potem AWK ;)

Inkluder, skoro masz całkiem potężne narzędzie, jakim jest tr, to w czym problem?

Kod: Zaznacz cały

[lessmian@pyrtek ~]$ echo '<table/>' | tr -s '<table/>' '_'
_
Jak to mawiał jeden admin z Torunia, man, alleluja i do przodu ;)
Inkluder
Posty: 7
Rejestracja: 17 grudnia 2010, 15:28

Post autor: Inkluder »

lessmian2 pisze:grzesiek, jednak przedkładam wygodę (przynajmniej dla mnie), nad te kilkanaście procent więcej czasu w oczekiwaniu na wynik. A może to po prostu przez to, że najpierw poznałem dobrze perla, a dopiero potem AWK ;)

Inkluder, skoro masz całkiem potężne narzędzie, jakim jest tr, to w czym problem?

Kod: Zaznacz cały

[lessmian@pyrtek ~]$ echo '<table/>' | tr -s '<table/>' '_'
_
Jak to mawiał jeden admin z Torunia, man, alleluja i do przodu ;)

Jedno szybkie pytanko. Jak użyć wyrażenia regularnego w tym?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Jak najlepiej.

Kod: Zaznacz cały

man tr
Inkluder
Posty: 7
Rejestracja: 17 grudnia 2010, 15:28

Post autor: Inkluder »

lessmian2 pisze:Jak najlepiej.

Kod: Zaznacz cały

man tr

http://linux.die.net/man/1/tr
Nic tam nie widzę sensownego...
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Oj chłopie. Zacytuję tylko fragment, a Ty wrzuć sobie opis do jakiegoś translatora, skoro nie widzisz nic sensownego:

Kod: Zaznacz cały

CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order 
[CHAR*] in SET2, copies of CHAR until length of SET1 
[CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 
[:alnum:] all letters and digits 
[:alpha:] all letters 
ODPOWIEDZ