Stílusosabb szkriptírás

Fórumok

Sziasztok.

Eddig nem volt különösebb problémám, mert rögösebb úton, hosszú és ronda sorokkal megoldottam a szkriptjeimet valahogy (cat, sed és awk a kedvencem). Anno a C tanárom mondta, hogy neki mindegy, milyen hosszú egy program, ha működik. akkor igazat adtam neki, mert leizzadtam, mire megoldottam amit kellett. (10 éve?)

Most elkezdtem gondolkodni azon, hogy nem lehetne-e néhány dolgot SZEBBEN és rövidebben megoldani.
Az alábbiak egyikét pl. awk-ban a mezőelválasztó átírásával oldanám meg ma is, na erre mondanák itt sokan, hogy ronda..

Szóval itt áll két tuti rövid dolog, amit hosszú utasítássor nélkül biztosan nem tudnék megcsinálni:

1.
unixos-dózeres sorvégjelek a szövegfájl végén. Ezek mindegyike legyen kicserélve SPACE-re vagy TAB-ra ahogy épp jólesik, azaz minden sorvégjel egy megadott stringre cserélődjön. Értelemszerűen legegyszerűbb ilyenkor rátolni a sed-re, de mégsem... Vagy a kéféle sorvégjelnek van egy Hexa kódja és azzal is menne a sed?

2.
Megadott stringet tartalmazó sor elején tűnjön el egy string, vagy kerüljön oda (pl. #)
Ezt is halál hosszú és randa sorokkal oldottam meg amikor éppen kellett.

Szóval két ilyen dolgot ki-ki hogyan oldana meg nagyon röviden? (Nem úgy mint én, hogy külső szkriptet hívtam meg...)

Hozzászólások

Ezek egyszerűek:

1. tr '\n' ' ' < file.txt
2. sed -i '/string_amit_a_sor_tartalmaz/s/\(.*\)/#\1/' file.txt
   ^- ha eltüntetni kell valamit az elejéről, azt is lehet sed-del

--
HUPbeszolas FF extension

kötekedés: a tr-nek kell a -s opció, különben egy DOS-sorvéges fájlban 2 db szóközzel választja el a sorokat, a (szerintem sokkal korrektebb) 1 helyett.

(Ja, és a feltételben sztringre kell cserélni a sorvégjelet, a tr viszont karakerre cserél, szóval lehet inkább sed -del kellene trükközni.)

No megnéztem, két hiba is van benne, amit nem szeret a FreeBSD natív sed-je:
- az első a ":a;N..." - azaz a cimke definiálása parancsra ";N..." "unused label" -t ír
- a második pedig ugyanennek a cimkének a használatánál, azaz az ugró parancsnál "$!ba;s" pedig "undefined label" -t mond.

Azt kell mondjam, mind a kettő legalábbis kérdéses, hogy kell-e mögé soremelés. Elsőre azt gondoltam, hogy kell, aztán úgy gondoltam, hogy mégse :-) - ez valószínűleg FreeBSD sed-hiba, hogy nem veszi észre, hogy a ; lezárja a cimkéket.

Szóval ha nem egy sorba írjuk a parancsokat ; -vel elválasztva, hanem legalább ennél a két parancsnál rakunk be egy ENTER-t a sed-parancs mögé, esetleg három db parancsként,

sed -e ':a' -e 'N;$!ba' -e 's/\n/string/g'

formában, akkor működik (kipróbálva).

Amindenit!
:)

Szerintem előszedem azokat a szkripteket, melyeket rondán írtam meg anno. valami képátméretezős-rendszerezős valami volt.

Lassan elkezdek szebben írni.

Kösz a sugallatokat, végigpróbálom mindet.

Pl. a tr-t aszem' még sosem használtam.

---
--- A gond akkor van, ha látszólag minden működik. ---
---

Az a kemeny hogy ez C-ben megirva is szebb mint barmelyik itt felettem :>
--
cythoon