[FreeBSD] sed
Gabor Zahemszky
ZGabor at CoDe.hu
2001. Aug. 16., Cs, 11:25:29 CEST
Szia!
On Thu, Aug 16, 2001 at 10:44:27AM +0200, Nohl Attila Rajmund wrote:
> IMHO ne a sed manualjat olvasgasd, hanem az awk-et :-) A sed csak
> sorokra megy, eleg szenvedes lesz, ha elozo soroktol fuggo dolgokat
> akarsz csinalni. awk-ban valami ilyesmire lesz szukseged:
Hm. Egy pelda arra, hogy milyen jo is az, ha a valaki a problemajat nemi
peldaval fuszerezi, lathato modon totalisan ket kulonbozo dolgot ertettunk
alatta. NAR megoldasa kicsit bobeszedu, de megfelel az elvarasoknak.
> BEGIN {
> JO_HELY=0;
> }
Az egesz BEGIN redundans :-)
> /ez itt a kezdet/ {
> JO_HELY=1;
> next;
> }
> /ez itt a veg/ {
> JO_HELY=0;
> next;
> }
> {
> if (0==JO_HELY) {
> next;
> }
> ...
> }
Miert az ellenkezojet teszteled, mint ami Neked kell? Helyette egyertelmubb:
JO_HELY == 1 {
...
}
> A ... helyere johet a te kodod.
>
(Es mivel csak kiiratni akar a feladat szerint, az egesz { ... } akcio
elhagyhato :-), eleg a minta resz.)
Es csak azert, hogy lathato legyen, nem olyan eszement ugyanez sed-ben
(speciel elofelteves, hogy csak egy kezdet es egy vegzet van:)
pipe eleje |
sed -e '1,/ez itt a kezdet/d' -e '/ez itt a vegzet/,$d' |
pipe vege
Es ha emlekeim nem csalnak, az elozo levelben emlegetett sed & awk konyv
szinte szorol szora ezt a feladatot vezeti le sedben, abban az altalanosabb
esetben, ha tobb kozrezart szoveg van. Amire egy nagyon egyszeru (csak
nem tul elegans) megoldas a kovetkezo:
pipe eleje |
sed -n -e '/ez itt a kezdet/,/ez itt a vegzet/p' |
sed -e '/ez itt a kezdet/d' -e '/ez itt a vegzet/d' |
pipe vege
Amiben ket sed is van (nekem nem sikerult eggyel megoldanom), es ebbol az
elsonel kell a ``-n'', a masodiknal meg nem
No pa, shell/sed/awk programozoi tanfolyamomat befejeztem, meg meg kene irnom
egy 4-5 oldalas eloadas anyagat a ``BSD vilaga'' cimu targykorben.
ZGabor at CoDe dot HU
--
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ ';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? ]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? ]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;X=;for i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;X="$X $i";typeset +l i;};print "$X"
További információk a(z) BSD levelezőlistáról