Szkriptek: Python, Perl, Bash, ...

"Idiomatikus" JS

Sziasztok!

Szeretnék elmélyedni a JavaScript nyelvben. Tudtok ajánlani olyan könyveket, oldalakat stb.-t, ahonnan meg lehet tanulni jól? Java/Scala fejlesztő vagyok, szeretném a JS-t úgy elsajátítani, hogy a JS szellemiségét, saját konstrukcióit, gondolkodásmódját is megértsem, ne csak olyan legyek aki Java-JavaScriptet ír.

Köszi,
M.

[Megoldva] log elemzés - bash

Sziasztok!

Saját log elemző írásán dolgozom. Egyelőre még csak annyi a célom, hogy a legtöbbet előforduló sorokat előfordulásuk gyakorisága szerint rendezzem. Ehhez azonos mintára kell hoznom -a külön erre a célra kigyűjtött, 1,3 GB-os- tűzfal logot: eltávolítani az időpecséteket, stb. és csak a hasznos üzenet részt hagyni meg. A formátum nagyjából megegyezik (csak a logolás szint tér el a vészesebb pontokat figyelő bejegyzéseknél).

Adott tehát a következő példa sor:


Feb  7 07:02:15 SERVER_NÉV kernel: [145088.358435] FW: INPUT_DROP IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:27:22:2c:12:91:08:00 SRC=akármi DST=akármi.255 LEN=96 TOS=0x00 PREC=0x00 TTL=128 ID=7043 PROTO=UDP SPT=137 DPT=137 LEN=76

Mit gondoltok, hogy lenne a legegyszerűbb eltávolítani a haszontalannak vélt információt, és a log bejegyzést csak a "FW: " utáni részt kiíratni??

- awk-val: a 7. blokk utáni rész kiíratása - megvalósítani csak felsorolással tudnám: 8,9,10, stb... de nem tudom mi lesz a vége... (ugyanis nem mindig egyezik a log üzi hossza)
- más tippem nincs

Köszönet, és Boldog Új Évet Nektek!

Üdv.:
V007

[Megoldva] Grep szűrés fájlból

Sziasztok!

Elakadtam egy kicsit, de lehet nem is olyan bonyolult.
Van egy ilyen sorom:

grep -v -e "valami1" $file > $file2

Ez eddig működik is sőt, ha több az -e "" akkor is, viszont ebben a helyzetben akár több 100 is lehet belőle, ezért azt kellene megoldani, hogy az -e "" egy .txt-ből legyen beolvasva, ahol egymás alá fel van sorakoztatva az ami nem kell.

próbáltam `cat file.txt` megoldással, nem vezetett eredményre.

Any help?

Megoldás:
grep -v -f patterns source > file

python "mozgatható" package készítése

Írtam egy package-t, ami szépen működik, de elég bénán építettem fel a hierarchiáját - import-ok keresztbe kasul és amúgy se mondható rendezettnek. Keresem a módot, hogy miként lehetne olyan package-t írni, ami egy másikba ágyazva is ugyanúgy működik, mintha csak egymagában használnám. Ez alapjába véve nem is lenne gond, de szeretném a közös cuccokat az __init__.py-be tenni és itt jön a probléma, ugyanis ha import pack-kal használom, akkor a pack.kozos_cucc néven elérem ezeket a függvényeket/változókat, viszont a from pack import * nem tölti be őket.

Persze, a válasz egyszerű, miért nem használom az első megoldást és minden elé kiírom a csomag nevét? Azért, mert a tkinter is az __init__.py-ben tárolja a legtöbb objektumát, mégis működik az import tkinter és a from tkinter import * egyaránt, tehát valszeg én vagyok képzetlen.

Mi a szabványos módja annak, hogy egy csomagon belül hivatkozzak a saját __init__.py-re, és hogy az abban található deklarációkat a main fájl a fent említett import módok közül bármelyikkel elérje?

EDIT:

Hogy gyakorlati példán is mutassam:


______________________________ KÖNYVTÁRSZERKEZET _____________________________

main.py
pack/
  __init__.py
  egyik.py
  subpack/
    __init__.py
    masik.py

___________________________________ FÁJLOK ___________________________________

__ MAIN.PY ____________________________

  import sys
  import pack
  import pack.egyik
  import pack.subpack
  import pack.subpack.masik

  print( sys.modules[ __name__ ] )

  print( pack.var )
  pack.egyik.fgv()

  print( pack.subpack.var )
  pack.subpack.masik.fgv()

__ PACK/__INIT__.PY ___________________

  import sys

  __all__ = [ 'egyik' ]

  var = sys.modules[ __name__ ]

__ PACK/EGYIK.PY ______________________

  import sys
  import pack

  def fgv():
    print( sys.modules[ __name__ ], pack.var )

__ PACK/SUBPACK/__INIT__.PY ___________

  import sys

  __all__ = [ 'masik' ]

  var = sys.modules[ __name__ ]

__ PACK/SUBPACK/MASIK.PY ______________

  import sys
  import pack.subpack

  def fgv():
    print( sys.modules[ __name__ ], pack.subpack.var )

__________________________________ KIMENET ___________________________________

<module '__main__' from 'foo\main.py'>
<module 'pack' from 'foo\pack\__init__.py'>
<module 'pack.egyik' from 'foo\pack\egyik.py'> <module 'pack' from 'foo\pack\__init__.py'>
<module 'pack.subpack' from 'foo\pack\subpack\__init__.py'>
<module 'pack.subpack.masik' from 'foo\pack\subpack\masik.py'> <module 'pack.subpack' from 'foo\pack\subpack\__init__.py'

Az import tkinter és a from tkinter import * dolgot félreérthettem, mert a fenti példában mindkét módon működik az '__init__.py'-kben lévő deklarációk importálása.
Azt akarom elérni, hogy ha nem a 'main.py', hanem az 'egyik.py' a fő fájl, amiből indítoma progit, akkor is működjön az 'egyik' és a 'subpack' és mindkettő lássa a 'subpack/__init__.py'-ben deklarált változókat, osztályokat, függvényeket. Ehhez viszont az kell, hogy képes legyen dinamikusan importálni a saját '__init__' fájlját és a 'subpack'-ot is, mert ha ez nem így történne, az import pack.subpack-ot kézzel kéne átírni import subppack-ra és ez szerintem nem épp professzionális megoldás.

a párhuzamosítás megbolondítja

Szervusztok!

A kimeneti érték nálam az inicializálláskori. Ki érti ezt?
Mit gondolok rosszul? Kösz, vfero

(GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu), wheezy)


#!/bin/bash -u

mknod time p &>/dev/null
mknod rc p &>/dev/null

r="R"
t="T"
(time (echo "hello" &> rc) &> time) & (t=`cat time`) & (r=`cat rc`)

echo "rc: " $r " time: " $t

UPDATE:
Így kell az ilyet csinálni:


{ time (echo "hello" &> rc ; sleep 1) &> time ; t=`cat time` ; r=`cat rc` ; }

Kösz Zahy, a megoldást a kapcsos valóban nyújtja! ;)

UPDATE2:
Ez a megoldás csak a wheezy:amd64-n megy ahol fejlesztek, de a squeeze:i686 így nem szereti. :S

Tömeges átnevezési probléma [Megoldva]

Sziasztok!

Ki tudnátok segíteni egy olyan szkripttel (bash v python), ami rekurzívan az adott könyvtár összes alkönyvtárában található fájlok/könyvtárak nevében kicseréli az ékezetes betűket nem ékezetesekre, és az olvashatatlan karaktereket aláhúzásjelre?

A problémám, hogy a fájlnevek egy más karakterkódolású szerverről lettek átemelve debian-ról ubuntura, és a a fájl nevekben mindeféle jelek, és kérdőjelek is keletkeztek.
Az eredeti állományhoz már nem lehet hozzáférni.

pl.: spir�lf�zet.txt --> spir_lf_zet.txt

pl Árvíztűrő_tükörfúrógép.txt --> Arvizturo_tukorfurogep.txt lesz

A következővel próbálkoztam, de sajnos nem cseréli le, csak annyit ír a fájlokhoz, hogy kihagyva:

#!/bin/bash

if [ $# -ne 1 ]
then
echo "***Használat: $programnev <útvonal>"
exit 1
fi

if cd "$1" 2>/dev/null
then
read -p "* Fájlok átnevezése a következö könyvtárban: $1 - mehet? (i/n)" valasz
[ $valasz != 'i' ] 2>/dev/null && exit 1
else
echo "***Hiba: a megadott könyvtár ($1) nem létezik."
exit 1
fi

counter=1
for betu in a e i o o o u u u A E I O O O U U U
do
ekezetnelkuli[$counter]="$betu"
counter=`expr $counter + 1`
done

for i in *
do
if [ `echo $i | grep -e '[^a-zA-Z0-9._]' | wc -l` -eq 0 ]
then
echo -e "*\t$i kihagyva"
continue
fi

counter=1
filename=$i
orig_filename=$filename

for j in á é í ó ö ő ú ü ű Á É Í Ó Ö Ő Ú Ü Ű
do
temp=`echo "$filename" | sed "s/$j/${ekezetnelkuli[$counter]}/g"`
filename=$temp
counter=`expr $counter + 1`
done

safefilename=`echo "$filename" | sed 's/[^a-zA-Z0-9._]/_/g'`

if [ ! -r "$safefilename" ]
then
mv -i "$i" "$safefilename" && echo " $orig_filename ---> $safefilename"
else
echo "***Hiba: a '$i' fájl nem nevezhető át, a fájlnév már létezik: $safefilename"
fi
done

Előre is köszönöm!

Megoldás ez lett:

convmv --notest -f latin2 -t utf8 -r /elérési/út

[megoldva]encoding problémák

Sziasztok!

Adott egy konfigfájl amit letöltök egy iptelóról és persze, hogy nem utf8-ba kódolva :(
Ezt szeretném szkriptel átírni és így beállítani a többi telót, a szkript megvan ékezet nélküli nevekkel fasza, de ékezet is kéne, a gond a fránya kódolással van.
így néz ki debian alól vimmel megnyitva: https://www.dropbox.com/s/nc1opemjg6pklbu/encoding.jpg
win alól notepad++ból megnyitva: https://www.dropbox.com/s/i5sb35746dizg3d/encodingnotepad%2B%2B.jpg
Ez van oda írva:Fürész Nóra
A jelenlegi kódolást sem bírom behatárolni
Notepad++ szerint:ANSI
a file -i parancs szerint:charset=binary
Hogyan tudnám olyan kódolásban beilleszteni a neveket a scriptemmel a konfigban, hogy jó legyen a név?
Előre is köszönm.

locale hiba bash scriptben

Sziasztok.

Svn commitról küldenék mailt egy bash scripttel.
Úgy néz ki a dolog, hogy a levél tartalmát összeállítom egy fájlba, amit a mail paranccsal küldök el.
Az ékezetes betűk helyett viszont ?\195?\161 és egyebek vannak, a date parancs kimenete pedig nem magyar locale szerinti. Az env szerint minden oké, és az svn-look log parancs kimenete is jó.
Csak a fájlba kerül rosszul.
Ötletem sincs, hogy mitől...