- f0xhu blogja
- A hozzászóláshoz be kell jelentkezni
- 913 megtekintés
Hozzászólások
{1} -ek feleslegesek.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
többek között
- A hozzászóláshoz be kell jelentkezni
Köszönöm! :) Csak szárnypróbálgatások; de most is tanultam valamit.
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Atyaég.
__________________________________
2e845cb4c3a5b5bd6508455b1739a8a2
- A hozzászóláshoz be kell jelentkezni
hát..
inkább "man date"
-formátumnak olyat adsz meg amit akarsz, kényelmes, szép, hibamentes
-bemeneti dátumot is lehet megadni nem csak az aktuálisat
- A hozzászóláshoz be kell jelentkezni
Ömm, értem én, de hogy tudom megoldani date-tel, hogy egy logból kinyerjem azokat a sorokat, amik dátummal kezdődnek (a fenti nem a sor elejére illeszt, ez igaz; illetve vannak sorok, amik nem dátummal kezdődnek és nem érdekelnek)?
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Perl?
__________________________________
2e845cb4c3a5b5bd6508455b1739a8a2
- A hozzászóláshoz be kell jelentkezni
Ezek csak sima matchelések, de pont ilyenekre találták ki a perlt. Természetesen a lentieknek még elég sok variációja lehetséges, ezért is (nem-) szeretjük ezt a nyelvet :)
Időre
Röviden:
echo "12:34" |\
perl -ne ' print "Matched time: $_"
if ( /\d{1,2}:\d{2}/ ) '
Pontosabb:
echo "12:34" |\
perl -ne ' print "Matched time: $_"
if ( /[0-2]?\d:\d{2}/ ) '
Dátumra:
Röviden:
echo "02/09/2010" |\
perl -ne ' print "Matched date: $_"
if ( /\d{2}\/\d{2}\/\d{4}/ ) '
Pontosabban:
echo "02/09/2010" |\
perl -ne ' print "Matched date: $_"
if ( /[0-3]\d\/[0-1]\d\/[1-2]\d{3}/ ) '
Természetesen a mintaillesztést könnyen át lehet fordítani hibajelzésbe, a második példánál maradva:
echo "12:34" |\
perl -ne ' print "Invalid time: $_"
unless ( /[0-2]?\d:\d{2}/ ) '
Persze fontos ismerni a várható értékeket. Szerintem barátibb a használata, mint az awk. Elég jól lehet ezt is pipe-olni, vagy sima shell script-be beilleszteni ilyen dolgokat.
__________________________________
2e845cb4c3a5b5bd6508455b1739a8a2
- A hozzászóláshoz be kell jelentkezni
Köszönöm! Alkalom adtán elmerülök ismét a Perl rejtelmeiben :) (legalábbis elolvasom mégegyszer a Learning Perl könyvem :)
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Ilyen mintaillesztéseket elég jól meg lehet benne írni, aztán bele lehet tolni shell scriptbe is, mondjuk így.
test=$( echo $value | perl -ne ' print 0 if (/valami minta/) ' )
[[ $test != 0 ]] && echo OK || echo NEMOK
Nyilván indokolt esetben, bonyolult mintánál érdemes használni. Meg legyen aki debugolja. Itt linkelek egy hasonló szépséget.
Nem vagyok ezekre túlzottan büszke, de sok olyan helyen beválik, ahol a teljes szkriptet egyszerűbb shellben megírni, viszont néha kell egy-egy bonyolultabb ellenőrzés, vagy olyan részlet amit egyszerűbb perlben megírni. A fenti linken látható részletet megírtam shellben is, de nem adott elég véletlenszerű eredményt. Se több, se kevesebb nem lett a kód mennyisége, viszont valahogy a véletlenszám generálás jobban ment a perlnek, nem mellesleg gyorsabban is.
__________________________________
2e845cb4c3a5b5bd6508455b1739a8a2
- A hozzászóláshoz be kell jelentkezni
A perl regex motorja pontosan mivel jobb, mint az awk-e?
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Részemről annyival, hogy az előbbit jobban ismerem.
__________________________________
2e845cb4c3a5b5bd6508455b1739a8a2
- A hozzászóláshoz be kell jelentkezni
Ha mindenképpen ragaszkodsz az awk-hoz:
FS=":" -> $1 = óra, $2 = perc
echo "14:45" | awk -F: '($1>=0)&&($1<24)&&($2>=0)&&($2<60){printf "%s:%s\n",$1,$2}'
Hasonló módon mehet a dátum is. De a dátum érvényességének ellenőrzése nem egy egysoros szkript szintje.
-----
Dropbox tárhely igénylése: https://www.getdropbox.com/referrals/NTI2MzM2MjA5
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm a segítséget! :) A dátum érvényességének ellenőrzéséhez a következőt használom (lehet, hogy hülyének tűnök miatta, de nekem nagyon tetszik :) [A user parancssorban adja át a dátumot éééé-hh-nn formában egy ksh "wrapper" szkriptnek; még sokminden mást csinálok, szóval csak kiragadott példa, de a saját kontextusában eddig jól működött]
check_date ()
{
INDATE=$1
LEN=$(expr length "$INDATE")
if [ $LEN -ne 10 ]; then
usage_notes
echo "Error> $INDATE is in an incorrect format. Required: YYYY-mm-dd"
exit 1
fi
MM=$(expr substr "$INDATE" 6 2)
DD=$(expr substr "$INDATE" 9 2)
YYYY=$(expr substr "$INDATE" 1 4)
D=`echo $DD|sed s/^0//`
cal $MM $YYYY|tail +3|grep $D > /dev/null
if [ ${?} -ne 0 ]; then
usage_notes
echo "Error> $INDATE is an invalid date."
exit 1
fi
}
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
echo "12:34" | awk '/[0-2][0-9]:[0-5][0-9](:[0-5][0-9])?/ { print "Matched time: " $0 }'
echo "02/09/2010" | awk '/[0-3][0-9]\/[0-3][0-9]\/[1-9][0-9][0-9][0-9]/ { print "Matched date: " $0 }'
Sajna az en awk-m nem kezeli a {} kozotti dolgokat, igy az ev egy kicsit csunya lett.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Kis szépséghiba: 24:00 és társai
-----
Dropbox tárhely igénylése: https://www.getdropbox.com/referrals/NTI2MzM2MjA5
- A hozzászóláshoz be kell jelentkezni
Jo, hat altalanos matchet irtam, persze, lehet az oraval szivozni, hogyaszondja:
([0-1][0-9]|2[0123])
de en felteteleztem az ertelmes inputot.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni