Sziasztok!
Előre szólok, nem vagyok valami nagy szkriptelő, csak nemrég kezdtem.
Bash-ben szeretném egy fájlból kiszedni a $START és $END közötti stringeket(ezek a stringek egyébként minden esetben számok).
Itt egy példafájl: http://pastebin.com/7kBpyAcP
...nowrap align="left">Színes1030< t ...
Legyen mondjuk $START="Színes" és $END="<" nekem a hasznos infó a 1030.
Jelenleg így szedem ki: EREDMENY=`sed -n "1,/$START/!{ /$END/,/$START/!p; }" in.tmp` de ez csak akkor működik ha csak egyszer szerepel a $START az in.tmp-ben, hogyan kéne csináljam, hogy ki szedjem az összes előfordulását $START*$END egy tömbbe vagy fájlba.
szerk: párszor beleszerkesztettem, mert a < code > valamiért nem akart működni.
- 4290 megtekintés
Hozzászólások
A sed azért nem annyira jó ebben az esetben, mivel alapvetően sorokon dolgozik, és szerintem te egy kicsit mást akarsz. Tehát neked a "Színes1030"-ból csak az 1030 kellene.
Én inkább egy egyszerű grep-pel kezdenék:
$ grep -o "Színes[0-9]*" raw.php
Színes1030
Színes19949
Színes84
Színes84
Ha csak a számok érdekelnek:
$ grep -o "Színes[0-9]*" raw.php | sed "s@Színes@@"
1030
19949
84
84
Az első lépést szerintem egyszerűbb grep-pel megcsinálni, mint sed-nek mindenféle bűvös parancsokat adogatni.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, ez kell nekem a grep-re nem is gondoltam, pedig mennyit használom :)
- A hozzászóláshoz be kell jelentkezni
Csak a jegyzőkönyv kedvéért egy gawk-specifikus megoldás:
gawk -vRS='Színes[0-9]+' '{print substr(RT,7)}'
- A hozzászóláshoz be kell jelentkezni
köszönöm, ez a megoldás is tetszik.
- A hozzászóláshoz be kell jelentkezni
Es tegyuk rogton hozza, hogy ehhez a fajl es a rendszer encodingjanak pontosan egyezni kell.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni