[bash] wyszukiwanie za pomoca grep
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
[bash] wyszukiwanie za pomoca grep
Witam,
mam takie pytanie, mam Ksiazke o podstawach linuxa, i mniewdzy innymi jest temat poswiecony komendzie GREP, probowalem zeby mi z mojego katalogu gdzie mam pliki textowe, zapisywal do pliku CG, wpszystkie nazwy plikow w ktorych zawartosci pojawila sie ta linijka:
"BNET\\auth\\command_groups"
Wie ktos jak to dokladnie za pomoca grep soe robi?
mam takie pytanie, mam Ksiazke o podstawach linuxa, i mniewdzy innymi jest temat poswiecony komendzie GREP, probowalem zeby mi z mojego katalogu gdzie mam pliki textowe, zapisywal do pliku CG, wpszystkie nazwy plikow w ktorych zawartosci pojawila sie ta linijka:
"BNET\\auth\\command_groups"
Wie ktos jak to dokladnie za pomoca grep soe robi?
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: [bash] wyszukiwanie za pomoca grep
Kod: Zaznacz cały
#!/bin/bash
katalog="/home/irmina"
stringi="wwwww"
for plik in ${katalog}/* ; do if [ `cat ${plik} 2>/dev/null | grep -c ${stringi}` -gt 0 ]; then echo ${plik}; fi; done

p.s idiot ze mnie, komlikuje sobie życie:
Kod: Zaznacz cały
#!/bin/bash
katalog="/home/irmina"
stringi="wwww"
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik}; done
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
#!/bin/bash
katalog="/home/irmina"
stringi="wwww"
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik}; done
hmm
w stringi co mam wpisac?
bo katalog, to pewnie docelowy...
/home/xxx/pvpgn/var/users
i tu mam mase plikow txt oznaczajacych konta uzytkownikow, to czyli skrypt ma wygladac tak?:
#!/bin/bash
katalog="/home/xxx/pvpgn/var/users"
stringi="wwww"
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik}; done
?
tylko walsnie gdzie mam wpisac sciezke gdize ma sie wynik zapisywac?:)
bo chcialbym zeby sie zapisywalo w: /home/xxx/wyniki/
pod nazwa CG
katalog="/home/irmina"
stringi="wwww"
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik}; done
hmm
w stringi co mam wpisac?
bo katalog, to pewnie docelowy...
/home/xxx/pvpgn/var/users
i tu mam mase plikow txt oznaczajacych konta uzytkownikow, to czyli skrypt ma wygladac tak?:
#!/bin/bash
katalog="/home/xxx/pvpgn/var/users"
stringi="wwww"
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik}; done
?
tylko walsnie gdzie mam wpisac sciezke gdize ma sie wynik zapisywac?:)
bo chcialbym zeby sie zapisywalo w: /home/xxx/wyniki/
pod nazwa CG
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: [bash] wyszukiwanie za pomoca grep
W stringi wpisujesz tą zawartość, która ma być znaleziona w pliku. katalog to miejsce, gdzie ma szukać plików z tą zawartością.
Jeżeli chcesz, aby ci zapisywałoza kazdym razem wyniki w /home/xxx/wyniki, to:
Jeżeli chcesz, aby ci zapisywałoza kazdym razem wyniki w /home/xxx/wyniki, to:
Kod: Zaznacz cały
#!/bin/bash
echo "" > /home/xxx/wyniki ;
katalog="/home/irmina" ;
stringi="wwww" ;
for plik in ${katalog}/* ; do grep -l ${stringi} ${plik} >> /home/xxx/wyniki; done
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
Nie no super:) wszystko gra:) dzieki wielkie, a mam jeszcze jedno pytanie 
mianowicie w tym samym katalogu i w tych samych plikach mam jeszcze taka linijka:
"BNET\\acct\\lastlogin_time"="1224693755"
to jest data ostatniego LOGOWANIA, tylko nie wiem jak rozgrysc zeby mi to normalnie pokazywalo [normalny format]
Ale ogolnie to chcialbym wiedziec czy ejst opcja na skrypt zeby pokazywalo mi wszystkie nazwy [tak jak w poprzednim] ale w ktorych ostatnie logowanie bylo wiecej jak 2 miesiace temu... da rade takie cos?

mianowicie w tym samym katalogu i w tych samych plikach mam jeszcze taka linijka:
"BNET\\acct\\lastlogin_time"="1224693755"
to jest data ostatniego LOGOWANIA, tylko nie wiem jak rozgrysc zeby mi to normalnie pokazywalo [normalny format]
Ale ogolnie to chcialbym wiedziec czy ejst opcja na skrypt zeby pokazywalo mi wszystkie nazwy [tak jak w poprzednim] ale w ktorych ostatnie logowanie bylo wiecej jak 2 miesiace temu... da rade takie cos?
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: [bash] wyszukiwanie za pomoca grep
to zależy jaka formę przyjmuje ta data..
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
hmm ogolnie takiemu last loginowi:
Wed Oct 22 18:42 2008
wg. pliku przypada taki:
"BNET\\acct\\lastlogin_time"="1224693755"
...
a moze poprostu da sie napsiac cos takiego ze zapisze mi do pliku nazwy plikow z tego katalogu, ktore byly edytowane 60 dni temu, [te co ponizej 60 dni zeby nie byly pokazywane]
da rade tak?
Wed Oct 22 18:42 2008
wg. pliku przypada taki:
"BNET\\acct\\lastlogin_time"="1224693755"
...
a moze poprostu da sie napsiac cos takiego ze zapisze mi do pliku nazwy plikow z tego katalogu, ktore byly edytowane 60 dni temu, [te co ponizej 60 dni zeby nie byly pokazywane]
da rade tak?
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: [bash] wyszukiwanie za pomoca grep
Kod: Zaznacz cały
#!/bin/bash
katalog="/home/irmina"
stringi='BNET\\acct\\lastlogin_time'
for plik in ${katalog}/* ; do cat ${plik} | grep ${stringi}| awk -F'\"' '{print "ostatni_login :", strftime ("%Y-%m-%d %H:%M:%S", $(NF-1))}'; done
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
no no
takie blady sie zrobily:
~/skrypty$ sh starylog
starylog: line 5: syntax error near unexpected token `cat'
starylog: line 5: `for plik in ${katalog}/* ; cat $plik | grep ${stringi}| awk -F'\"' '{print "ostatni_login :", strftime ("%Y-%m-%d %H:%M:%S", $(NF-1))}'; ; done'
hmm i czy nie powinienem dopisac:
echo "" > /home/xxx/wyniki1 ;
?

~/skrypty$ sh starylog
starylog: line 5: syntax error near unexpected token `cat'
starylog: line 5: `for plik in ${katalog}/* ; cat $plik | grep ${stringi}| awk -F'\"' '{print "ostatni_login :", strftime ("%Y-%m-%d %H:%M:%S", $(NF-1))}'; ; done'
hmm i czy nie powinienem dopisac:
echo "" > /home/xxx/wyniki1 ;
?
- leon1313
- Zakręcona Traszka
- Posty: 668
- Rejestracja: 02 sty 2006, 19:35
- Płeć: Mężczyzna
- Wersja Ubuntu: 10.10
- Środowisko graficzne: KDE Plasma
- Architektura: x86
Odp: [bash] wyszukiwanie za pomoca grep
porawiłem, brakowało do.
Poza tym napisz, jakiego narzedzia potrzebujesz, ino kompleksowo, bo teraz to ganianie za kawałkiem marchewki
Poza tym napisz, jakiego narzedzia potrzebujesz, ino kompleksowo, bo teraz to ganianie za kawałkiem marchewki
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
- el.pescado
- Zakręcona Traszka
- Posty: 734
- Rejestracja: 26 maja 2005, 11:43
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
Można prościej:
Kod: Zaznacz cały
grep -rl "BNET\\auth\\command_groups" katalog
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
:/starylog: line 5: syntax error near unexpected token `;'
starylog: line 5: `for plik in ${katalog}/* ; do cat ${plik} | grep ${stringi}| awk -F'\"' '{print "ostatni_login :", strftime ("%Y-%m-%d %H:%M:%S", $(NF-1))}'; ; done'
Leon, skoro tak bledy wywala to moze poprostu jakos sie da zeby zapisywalo mi do pliku wszystkie nazwy kont ktore byly starsze niz 60 dni [chodzi o date edycji pliku, bo zdaje sie ze to chyba jest rowne tej linijce co podalem]
ps. el.pescado, ja juz druga kwestia, podobna poruszam;], odnosnie last loginu.
-
- Sędziwy Jeż
- Posty: 31
- Rejestracja: 25 lut 2007, 23:30
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: Brak
Odp: [bash] wyszukiwanie za pomoca grep
Nie wiem czy to Ci pomoże ale datę postaci sekund od 1 stycznia 1970r czyli np. "1224693755" można zamienić na datę w czytelnym dla człowieka formacie za pomocą polecenia date, np.hmm ogolnie takiemu last loginowi:
Wed Oct 22 18:42 2008
wg. pliku przypada taki:
"BNET\\acct\\lastlogin_time"="1224693755"
Kod: Zaznacz cały
$ date -d'@1224693755'
śro, 22 paź 2008, 18:42:35 CEST
Edit:
Z kolei jeśli chcesz wiedzieć ile to będzie 60 dni temu w sekundach od 1 stycznia 1970r użyj polecenia
Kod: Zaznacz cały
$ date -d'60 days ago' +%s
1219541138
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
thmm to jak to w calosc zlepic?
na gorze zapodac
#!/bin/bash
$ date -d'@1224693755' śro, 22 paź 2008, 18:42:35 CEST
$ date -d'60 days ago' +%s 1219541138
echo "" > /home/xxx/wyniki ;
katalog="/home/xxx/pvpgn/var/users" ;
cos na tej zasadzie? [plus ta komenda do przzeszukiwania ?]
na gorze zapodac
#!/bin/bash
$ date -d'@1224693755' śro, 22 paź 2008, 18:42:35 CEST
$ date -d'60 days ago' +%s 1219541138
echo "" > /home/xxx/wyniki ;
katalog="/home/xxx/pvpgn/var/users" ;
cos na tej zasadzie? [plus ta komenda do przzeszukiwania ?]
-
- Sędziwy Jeż
- Posty: 31
- Rejestracja: 25 lut 2007, 23:30
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: Brak
Odp: [bash] wyszukiwanie za pomoca grep
Podaj przykładowy plik do sparsowania, będzie nam łatwiej rozwiązać problem.
Mam nadzieję, że ta komenda da oczekiwany efekt, czyli wypisze na ekran nazwy plików, w których data nie będzie starsza niż 2 miesiące:
Jeśli chcesz zapisać to do pliku dodaj na końcu polecenia takie coś:.
Jeśli natomiast chcesz opakować to wszystko w skrypt to będzie on wyglądać mniej więcej tak:
Mam nadzieję, że ta komenda da oczekiwany efekt, czyli wypisze na ekran nazwy plików, w których data nie będzie starsza niż 2 miesiące:
Kod: Zaznacz cały
gawk -F\" -v minDate=$(date -d'2 months ago' +%s) '( $0 ~ /"BNET\\acct\\lastlogin_time"="[0-9]+"/ && $4 > minDate) {print FILENAME; nextfile}' /home/xxx/pvpgn/var/users/*
Kod: Zaznacz cały
> /home/xxx/wyniki
Jeśli natomiast chcesz opakować to wszystko w skrypt to będzie on wyglądać mniej więcej tak:
Kod: Zaznacz cały
#!/bin/bash
dir="/home/xxx/pvpgn/var/users/"
ofile="/home/xxx/wyniki"
minDate=$(date -d'2 months ago' +%s)
gawk -F\" -v minDate=$minDate '( $0 ~ /"BNET\\acct\\lastlogin_time"="[0-9]+"/ && $4 > minDate) {print FILENAME; nextfile}' ${dir}* > $ofile
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
to jeszcze raz ;]
sprawa wyglada tak ze:
w katalogu
/home/xxx/pvpgn/var/users - mam pliki textowe, ktorych nazwy odpowiadaja nazwom kont uzytkownikow, w nich mam walsnie ta linijke odnosnie ostatniego logowania. I potrzebuje taki skrypt ktory to by mi wyszukiwal i zapisywal do pliki w:
/home/xxx/wyniki/ w pliki starylog
tylko te nazwy kont na ktore ostatnie logowanie bylo starsze niz 60 dni.
linijka ta w oryginale wyglada tak:
"BNET\\acct\\lastlogin_time"="1224736449"
ta data = Thu OCT 23 06:34 2008
a co do skryptu, tego co podales, to ... niestety nie dziala... tworzy mi ten plik ale jest on pusty.
sciezki pozmienialem na takie o bo tokladnie chcialem zeby to tak sie orbilo, przyczym ten starylog, ma byc jako plik.txt
sprawa wyglada tak ze:
w katalogu
/home/xxx/pvpgn/var/users - mam pliki textowe, ktorych nazwy odpowiadaja nazwom kont uzytkownikow, w nich mam walsnie ta linijke odnosnie ostatniego logowania. I potrzebuje taki skrypt ktory to by mi wyszukiwal i zapisywal do pliki w:
/home/xxx/wyniki/ w pliki starylog
tylko te nazwy kont na ktore ostatnie logowanie bylo starsze niz 60 dni.
linijka ta w oryginale wyglada tak:
"BNET\\acct\\lastlogin_time"="1224736449"
ta data = Thu OCT 23 06:34 2008
a co do skryptu, tego co podales, to ... niestety nie dziala... tworzy mi ten plik ale jest on pusty.
Kod: Zaznacz cały
#!/bin/bash
dir="/home/xxx/pvpgn/var/users/"
ofile="/home/xxx/wyniki/starylog"
minDate=$(date -d'2 months ago' +%s)
gawk -F\" -v minDate=$minDate '( $0 ~ /"BNET\\acct\\lastlogin_time"="[0-9]+"/ && $4 > minDate) {print FILENAME; nextfile}' ${dir}* > $ofile
-
- Sędziwy Jeż
- Posty: 31
- Rejestracja: 25 lut 2007, 23:30
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: Brak
Odp: [bash] wyszukiwanie za pomoca grep
Czyli nazwy użytkowników, którzy logowali się w ciągu ostatnich dwóch miesięcy mają się znajdować w pliku: /home/xxx/wyniki/starylog
Zmień w podanym przeze mnie skrypcie trzecią linijkę na:
ofile="/home/xxx/wyniki/starylog"
Oraz upewnij się czy masz zainstalowane gawk, jeśli nie, wywołaj polecenie:
Edit: Ok, ścieżki już pozmieniałeś, działa?
Zmień w podanym przeze mnie skrypcie trzecią linijkę na:
ofile="/home/xxx/wyniki/starylog"
Oraz upewnij się czy masz zainstalowane gawk, jeśli nie, wywołaj polecenie:
Kod: Zaznacz cały
sudo apt-get insall gawk
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
Procek, tak wlasnie mialem.. tworzy sie tylko pusty plik...
a jak sprawdzic czy mam
bo z ROOT`a ja wpisuje:
to mam ...
a jak sprawdzic czy mam
Kod: Zaznacz cały
gawk
Kod: Zaznacz cały
sudo apt-get insall gawk
Kod: Zaznacz cały
bash: sudo: command not found
-
- Sędziwy Jeż
- Posty: 31
- Rejestracja: 25 lut 2007, 23:30
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: Brak
Odp: [bash] wyszukiwanie za pomoca grep
Czy masz w ogóle Ubuntu?
A to czy masz gawk możesz sprawdzić wpisując np. polecenie:
które powinno dać podobny efekt do tego:
Jeśli natomiast napisane jest po prostu gawk: to znaczy, że nie masz.
Jeśli nie wiesz jak zainstalować gawk w swojej dystrybucji spróbuj użyć, w podanym przez mnie skrypcie, polecenia awk (przy czym u mnie zachowanie samego awk było dość dziwne, bo ignorowało polecenie nextfile, dopiero po instalacji gawk, awk zaczęło je interpretować).
A to czy masz gawk możesz sprawdzić wpisując np. polecenie:
Kod: Zaznacz cały
whereis gawk
Kod: Zaznacz cały
gawk: /usr/bin/gawk /usr/share/man/man1/gawk.1.gz
Jeśli nie wiesz jak zainstalować gawk w swojej dystrybucji spróbuj użyć, w podanym przez mnie skrypcie, polecenia awk (przy czym u mnie zachowanie samego awk było dość dziwne, bo ignorowało polecenie nextfile, dopiero po instalacji gawk, awk zaczęło je interpretować).
-
- Piegowaty Guziec
- Posty: 27
- Rejestracja: 25 cze 2008, 14:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: GNOME
- Kontakt:
Odp: [bash] wyszukiwanie za pomoca grep
Kod: Zaznacz cały
gawk: /usr/bin/gawk /usr/X11R6/bin/gawk /usr/bin/X11/gawk /usr/share/man/man1/gawk.1.gz
ps. free-online.pl/~monastyr/dex4
tu jest przykladowe konto, to plik konta.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości