Freesco, NND, CDN, EOS
http://forum.freesco.pl/

Bash - prośba o pomoc
http://forum.freesco.pl/viewtopic.php?f=22&t=15221
Strona 1 z 2

Autor:  Albercik [ czwartek, 19 kwietnia 2007, 10:47 ]
Tytuł:  Bash - prośba o pomoc

w pliku "ipki" są wpisane IP jedne pod drugimi. Chciałbym z tego pliku wyłowić zadane IP i robię:

: [/] [] ()
cat ipki | grep 192.168.1.24


ale wynik jest następujący:
: [/] [] ()
192.168.1.24
192.168.1.240
192.168.1.241
192.168.1.242
192.168.1.243


jak zrobić to tak, aby TYLKO zadane IP wyłowiło z pliku ?

Autor:  Mis' [ czwartek, 19 kwietnia 2007, 10:54 ]
Tytuł:  Re: Bash - prośba o pomoc

Albercik pisze:
w pliku "ipki" są wpisane IP jedne pod drugimi. Chciałbym z tego pliku wyłowić zadane IP i robię:

: [/] [] ()
cat ipki | grep 192.168.1.24


ale wynik jest następujący:
: [/] [] ()
192.168.1.24
192.168.1.240
192.168.1.241
192.168.1.242
192.168.1.243


jak zrobić to tak, aby TYLKO zadane IP wyłowiło z pliku ?


Po pierwsze nie męcz kotów :-)
Po drugie, znaczek ^ oznacza początek, a znaczek $ koniec linii. Już wiesz? Brawo! dokładnie tak:

grep '192.168.1.24$' nazwa_pliku

Powyższe oczywiście nie zadziała jeśli po adresie IP będą spacje, tabulatory lub inne znaki niedrukowane.
A za karę w manualu poszukaj opcji -w...

Autor:  Albercik [ czwartek, 19 kwietnia 2007, 11:00 ]
Tytuł: 

Chwała Ci za to Dobry Człowieku :)

Autor:  viater [ czwartek, 19 kwietnia 2007, 14:08 ]
Tytuł:  Re: Bash - prośba o pomoc

Mis' pisze:
grep '192.168.1.24$' nazwa_pliku

Wystarczyłoby
: [/] [] ()
grep '192.168.1.24 ' plik

czyli spacja zamiast $.

Autor:  Mis' [ czwartek, 19 kwietnia 2007, 15:16 ]
Tytuł:  Re: Bash - prośba o pomoc

viater pisze:
Mis' pisze:
grep '192.168.1.24$' nazwa_pliku

Wystarczyłoby
: [/] [] ()
grep '192.168.1.24 ' plik

czyli spacja zamiast $.


ilość znaków ta sama... a Albercik mówił, że w każdej linii jest tylko adres ip więc te spacje co ich chcesz szukać grepem trzeba by dopisywac...
a w ogóle to chyba grep -w 192.168.1.24 powinien sobie poradzić.
There is so many ways to skin a cat... :P

Autor:  viater [ czwartek, 19 kwietnia 2007, 16:26 ]
Tytuł:  Re: Bash - prośba o pomoc

Mis' pisze:
ilość znaków ta sama... a Albercik mówił, że w każdej linii jest tylko adres ip więc te spacje co ich chcesz szukać grepem trzeba by dopisywac...

Fakt :oops:
Zagalopowałem się, bo niedawno wyciągałem grepem linie z zadanym IP z `cat /proc/net/ip_conntrack` i wtedy wystarczyło dać spację na końcu...

Autor:  -MW- [ piątek, 20 kwietnia 2007, 00:45 ]
Tytuł: 

a tak nie mozna:

cat ipki | grep 192.168.1.24[[:space:]]

Autor:  Mis' [ piątek, 20 kwietnia 2007, 09:44 ]
Tytuł: 

-MW- pisze:
a tak nie mozna:

cat ipki | grep 192.168.1.24[[:space:]]


nieuważnie czytasz. Po pierwsze męczysz kota, co jest kompletnie zbędne, a po drugie (co już zauważyłem odpowiadając Viaterowi) w pliku o którym mówi Albercik nie ma żadnych znaków po adresie IP...
Gdybyś powyższe zapisał tak:

grep 192.168.1.24[[:space:]]* nazwa_pliku

to pokrywało by to sytuację gdy po adresie IP jest zero lub więcej spacji/tabulatorów (ale nie innych znaków). I takiego wyrażenia Albercik by mógł użyć, gdyż obejmowałoby swoim zasięgiem sytuację którą ma w swoich plikach. Z tym, że to wyrażenie byłoby nadmiarowe, gdyż on w swoim pliku nie ma żadnych znaków po adresie IP. Dlatego w tym przypadku najsensowniejsze wydaje się użycie wyrażenia ze znakiem końca linii.

Autor:  -MW- [ piątek, 20 kwietnia 2007, 10:13 ]
Tytuł: 

pod warunkiem ze przypadkiem nie postawi mu sie spacja ;)
w wowczas we wspomnianym wyzej przypadku sypnie beledami.
czyli najbezpieczniej wydaje mi sie uzyc wlasnie takiej skladni.

Autor:  tasiorek [ piątek, 20 kwietnia 2007, 10:20 ]
Tytuł: 

Najbezpieczniej i najlogiczniej jest skorzystac z opcji jakie oferuje grep, a nie kombinowac jak kon pod gorke:
grep -w 192.168.1.24

Autor:  Albercik [ niedziela, 22 kwietnia 2007, 16:17 ]
Tytuł: 

Obydwa sposoby sprawują się bez zarzutów :
"grep -w 192.168.1.24 nazwa_pliku" oraz "grep '192.168.1.24$' nazwa_pliku"
Dzięki za pomoc. Troszkę więcej wygibasów trzeba wykonać jeśli zamiast IP podstawia się zmienną w pierwszym przypadku....

: [/] [] ()
grep "^${IP_KOM}$" nazwa_pliku

Autor:  Albercik [ niedziela, 29 kwietnia 2007, 00:49 ]
Tytuł: 

Jeszcze jedno pytanko : jak zrobić pętlę , aby czytała np. wyrazy czy liczby z pliku linia po linii ?

Autor:  tasiorek [ niedziela, 29 kwietnia 2007, 00:57 ]
Tytuł: 

: [/] [] ()
#!/bin/bash
while read line; do
echo $line
echo "nowa linia"
done < dane

ten skrypt bedzie wypisywal kolejne linie z pliku dane i po kazdej dodawal "nowa linia"

Autor:  tassman [ poniedziałek, 30 kwietnia 2007, 20:52 ]
Tytuł: 

podepne sie:

jak mozna polaczyc dwa warunki w petli if...then?

np. if [ "$1" = "start" ]; then

i if [ "$2" = "IP" ]; then

Autor:  viater [ poniedziałek, 30 kwietnia 2007, 21:44 ]
Tytuł: 

tassman pisze:
podepne sie:

jak mozna polaczyc dwa warunki w petli if...then?

np. if [ "$1" = "start" ]; then

i if [ "$2" = "IP" ]; then


if [ "$1" = "start" ] && [ "$2" = "IP" ]; then
...
fi

Autor:  -MW- [ poniedziałek, 30 kwietnia 2007, 21:45 ]
Tytuł: 

Cytuj:
#!/bin/bash
while read wyraz1 wyraz2 wyraz3 wyraz4 ; do
echo $line
echo "nowa linia"
done < dane



Cytuj:
if [ "$1" = "start" -a "$2" = "IP" ]; then
if [ "$1" = "start" -o "$2" = "IP" ]; then



-a and
-o or

Autor:  Mis' [ poniedziałek, 30 kwietnia 2007, 21:47 ]
Tytuł: 

tassman pisze:
podepne sie:

jak mozna polaczyc dwa warunki w petli if...then?

np. if [ "$1" = "start" ]; then

i if [ "$2" = "IP" ]; then



Na przykład tak:

: [/] [] ()
if [ $1 = start -a $2 = IP ]; then
      #polecenia jeśli powyższe jest prawdą
fi


albo

: [/] [] ()

if [ $1 = start ]; then
   if [ $2 = IP ]; then
       #polecenia
   fi
fi


Autor:  tassman [ wtorek, 1 maja 2007, 08:40 ]
Tytuł: 

w takowym skrypcie, na moje potrzeby parametr help wylowuje prawidlowo, natomiast parametr: start i koncowka IP niestety nie.

#!/bin/bash
# Wyświetlenie tekstu pomocy
#############################################################################

if [ "$1" = "help" ]; then
echo "przypominacz V0.1 2007-04-30 (C) tassman 2006 dla NND"
echo "Włączanie i wyłączanie przypominania"
echo "--------------------------------------------"
echo "Uzycie:"
echo "przypomnienie parametr1 parametr2"
echo "parametr1 -> start stop check help"
echo "parametr2 -> ADRES_IP"
echo " "
else
echo " "
echo "Podales zly parametr"

fi

#Start przypomnienia
#############################################################################

if [ "$1" = start -a "$2" = "" ]; then

echo "Przypomnienia wlaczone dla 192.168.1$2"
iptables -A PREROUTING -t nat -s 192.168.1.$2 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:82 -m limit --limit 60/h --limit-burst

fi

Autor:  viater [ wtorek, 1 maja 2007, 10:29 ]
Tytuł: 

Wstaw w warunkach "==" zamiast "=" i będzie dobrze.
"=" jest operatorem podstawienia, zaś operatorem porównania (którego powinieneś użyć) jest właśnie "==".

Poczytaj o operatorach.

Autor:  tassman [ środa, 9 maja 2007, 09:08 ]
Tytuł: 

#!/bin/bash
# Wyświetlenie tekstu pomocy
#############################################################################

if [ "$1" = "help" ]; then
echo "przypominacz V0.1 2007-04-30 (C) tassman 2006 dla NND"
echo "Włączanie i wyłączanie przypominania"
echo "--------------------------------------------"
echo "Uzycie:"
echo "przypomnienie parametr1 parametr2 parametr 3"
echo "parametr1 -> start stop check help"
echo "parametr2 -> ADRES_IP"
echo "parametr3 -> czestotliwosc"
echo " "
else
echo " "
echo "Podales zly parametr"

fi

#Start przypomnienia
#############################################################################

if [ "$1" = "start" ] && [ "$2" == "" ]; then

echo "Przypomnienia wlaczone dla 192.168.1.$2"
iptables -A PREROUTING -t nat -s 192.168.1.$2 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:82 -m limit --limit 60/h --limit-burst 1

fi


dalej to samo, probwalem jeszcze kilku innych sztyczek ale cos nie tak... popatrzcie prosze

Strona 1 z 2 Strefa czasowa UTC+2godz.
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/