Sziasztok!
Olyan gondom van, hogy egy html fájlban előfordul több új sor karakter egy oszlop soron belül <(< td >< /td >). Szabályosan nekem itt egy sor kellene.
Milyen megoldással lehetne azt elérni, hogy töröljem az új sor karaktert, de csak a < td >< /td >
között.
Néztem a tr-t, az awk-ot is de nem jutok dűlőre.
Az odáig ok, hogy ki tudom keresni pl. így:
awk '$NF !~ />/' file.html
Viszont ez még sem törli így:
awk '$NF !~ />/' < file.html | tr -d '\r' | tr -d '\n'
Előre is köszi!
- 5259 megtekintés
Hozzászólások
tehát az a gond, hogy egy < td > < /td > között több soremelés van?
- A hozzászóláshoz be kell jelentkezni
Igen, látom lemaradt a zárójel tartalma. Javítom...
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Az awk nyelvvel nem CSAK keresel, hanem feldolgozol, pl. kiírsz is, és itt az a lényeg, hogy mit írsz ki.
Másrészt az awk-nak van egy ritkán idézett, tartományminta nevű szolgáltatása:
awk '
/<td>/,/<\/td>/ {
if (/<\/td>/) {
print gyujto, $0
gyujto=""
} else {
gyujto = gyujto " " $0
}
next
}
{ print }
'
- A hozzászóláshoz be kell jelentkezni
Hm...ez valahogy nem jön le...
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Sajnos nem vezet hozzá királyi út, de nézd a pohár tele részét: kódod már van, már csak meg kell érteni, a kulcsszót is ismered hozzá... doksi van, magyar is.
- A hozzászóláshoz be kell jelentkezni
Ok, csak ez error-ral elszáll...
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
???
$ awk '
> /<td>/,/<\/td>/ {
> if (/<\/td>/) {
> print gyujto, $0
> gyujto=""
> } else {
> gyujto = gyujto " " $0
> }
> next
> }
> { print }
> '
<td>
1
2
3
4
5
</td>
<td> 1 2 3 4 5 </td>
$
- A hozzászóláshoz be kell jelentkezni
Igazad van! Más a gond, mert a módosítandó fájlon nem megy, ha én hozok létre egy html-t, akkor valóban működik.
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Nem \r\n zavarja meg?
- A hozzászóláshoz be kell jelentkezni
Ott lehet a gond, ha egyik cellában a háború és béke van a másikban meg Harry Poter 1-n-ig akkor azt valahogy nem tudja összefűzni.
inkább frintf("%s",$0)-el íratnám ki a sort az else ágban.
- A hozzászóláshoz be kell jelentkezni
Nem, gyakorlatilag egy mondat van a cellákban és úgy néz ki némelyiknél, mintha valaki megnyitotta volna editorral és a mondat közepén ütött volna egy entert.
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Praktikus volna feltölteni valahová egy ilyen fájlt. Még az is lehet, hogy más formátumstikli is akad, ami viszont könnyen korrigálható.
- A hozzászóláshoz be kell jelentkezni
Igaz, viszont ez nem publikus adatokat is tartalmaz...
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Akkor lehetőség adódik gyakorolni a sed használatát pl. olyanképpen hogy
sed -e 's/>[ A-Za-z0-9_]\+/>x/g' -e 's/[ A-Za-z0-9_]\+</x</g' titkosfajl > publikusfajl
- A hozzászóláshoz be kell jelentkezni
:D
üdv: pomm
A 852-es kídlap telepötúsa sikeresen befejezádétt
- A hozzászóláshoz be kell jelentkezni
Elméletileg a _g_awk nem tartalmaz memórialimiteket, vagyis amit a HW/OS tud, azt tudja.
Másrészt az ltrace/strace elárulja, hogy teljesen mindegy, hogy print, print $0 vagy printf "%s\n", $0 alakot használunk, ui. mindegyik ugyanarra az (f)write C libfüggvényre bomlik le.
- A hozzászóláshoz be kell jelentkezni
Ha ismert a \n-ek száma a
között, akkor simán seddel is cserélhetsz.
sed "s/< td> \n< /td >/< td >< /td >/g" BEMENETTIFILE >KIMENETIFILE
(Bocs a szóközökért)
Persze regexp is mehet sednek.
- A hozzászóláshoz be kell jelentkezni
Ugye tudod, hogy ebben szemantikai és szintaktikai hiba is van?
- A hozzászóláshoz be kell jelentkezni