Nowe posty

Autor Wątek: wynik zmienej w grep  (Przeczytany 4559 razy)

harum

  • Gość
wynik zmienej w grep
« dnia: 2008-02-04, 11:51:50 »
Przyznam ze jestem nieco poczatkujacy jesli chodzi o skrypty
ale mam cos takiego:
x=`date +%b%e`
y=`grep  SSH_brute_force /var/log/messages | grep "Feb  4" | awk '{print $1, $2, $9}'`
echo "$x"
echo "$y"
 chodzi mi oto by zamiast grep "Feb  4" zawsze pobieralo wynik jaka daje zmienna  $x ktora sie zmienia codziennie  
czyli  aktualny miesiadz i dzien miesiaca
mam nadzieje ze nie zamotalem zawiele

arctgx

  • Gość
wynik zmienej w grep
« Odpowiedź #1 dnia: 2008-02-04, 14:11:01 »
Ja nie potrafię połapać się, o co Ci chodzi... chciałeś zamiast "Feb 4" dać $x lub "$x" i to nie działa? Celowo wyróżniłem zmienną w cudzysłowie, który maskuje spację między "Feb" a "4". Bez niego do polecenia trafia spacja jako separator parametrów i tylko Feb zdaje się być grepowanym łańcuchem.

harum

  • Gość
wynik zmienej w grep
« Odpowiedź #2 dnia: 2008-02-04, 14:21:25 »
prosciej moze
grep "Feb  4" dzila mi jak nalezy ale musze sam tam date wpisac  miesiadz i dzien i wylistuje mi tylko z tego dnia  SSH_brute_force Ale chcialbym  by tak to zrobic  by sam pobieral sobie date dzisiejszom  ktora mu pokaze x=`date +%b%e`  i wtedy  wylistuje mi tylko  grep " dzisiaj"
orany nmma nadzieje ze jeszcze bardziej nie namieszalem

arctgx

  • Gość
wynik zmienej w grep
« Odpowiedź #3 dnia: 2008-02-04, 20:18:22 »
Kolego, czy mógłbyś zainstalować sobie sprawdzanie pisowni? Za taką twórczość językową jak "miesiadz" przyznaję Ci osobiste wyróżnienie ;)

Nie napisałeś czy próbowałeś cudzysłowu, o którym wspomniałem.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
wynik zmienej w grep
« Odpowiedź #4 dnia: 2008-02-04, 21:28:08 »
x=`date +%b%e`
y=`grep SSH_brute_force /var/log/messages | grep "$x" | awk '{print $1, $2, $9}'`
echo "$y"


EDIT:

Polecam zwrócić uwagę na język. Wynik polecenia `date +%b%e` dla usera z ustawionym językiem polskim będzie następujący: "lut 4". Jeżeli koniecznie potrzebujesz "Feb 4", to musisz ustawić zmienną środowiskową LANG na "en_EN":

x=`LANG=en_EN date +%b%e`


EDIT 2:

Jeżeli już posługujesz się awk, to warto by sprawdzenie daty dać właśnie tam, czyli sprawdzenie odpowiednich kolumn. Sam grep sprawdza jedynie wystąpienie wzorca w całej linii. Ewentualnie możesz użyć grepa z wyrażeniem regularnym.
Jest mało prawdopodobne, by "Feb 4" czy inna data wystąpiła w tekście logu, ale nie jest to niemożliwe.
To trochę czepianie się, ale czasem warto napisać skrypt idealnie, bo może to zaoszczędzić problemów później.


EDIT 3:

Właściwie to widzę pewien problem przy tym co podałem wyżej. Polecenie `date +%b%e` zwróci, dla przykładu, "Feb10" oraz "Feb_4", gdzie _ to spacja. W logach dzień jest natomiast zawsze dopełniony spacją, więc tam będzie: "Feb_10", ale "Feb__4".
Oznacza to, że musisz zmienić format polecenia `date +%b%e` na `date "+%b %_e"`.

Posprawdzaj poleceniem `date "+%b %_e" --date="20080204"`, jak date działa dla różnych dat. Polecam też `date --help` i `man date`.


Pozdrawiam.