Portál AbcLinuxu, 7. května 2025 22:18

Dotaz: Nahrazeni textu v html souborech

11.1.2012 22:45 tux
Nahrazeni textu v html souborech
Přečteno: 354×
Odpovědět | Admin
Mam asi 50 HTML souboru a v kazdem je:
<a href="/path/img.jpg" rel="gb_imageset[aqha]" title="jmeno - obrazku"><img class="foobar" src="/path/img_nahled.jpg" alt="jmeno - obrazku"></a>
potrebuju tento radek ve vsech souborech nahradit za:
<a href="/path/img.jpg" rel="gb_imageset[aqha]" title="jmeno - obrazku"><img class="foobar" src="/path/img_nahled.jpg" alt="jmeno - obrazku"></a>
<a href="/path/ABC.jpg" rel="gb_imageset[aqha]" title="jmeno - obrazku"><img class="foobar" src="/path/ABC_nahled.jpg" alt="jmeno - obrazku"></a>
tedy 2 radky, muzete mi prosim poradit, jak na to?

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.1.2012 22:56 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed
11.1.2012 22:58 rob
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
projedte to sedem pro vsechny soubory
sed 's/\/path\/img/\/path\/ABC/g' < vstup > vystup
11.1.2012 23:06 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
alebo pouzit argument -i

a cele to dat do find alebo cyklu
11.1.2012 23:09 tux
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
To jsem zkousel a funguje to.

Ja ale potrebuju 1 uvedeny radek nahradit dvema novymi - vlastne pridat jeden radek na to urcene misto.
wamba avatar 12.1.2012 00:24 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
perl -pE 'print $_;s{/path/img}{/path/ABC}g' <vstup >vystup
This would have been so hard to fix when you don't know that there is in fact an easy fix.
12.1.2012 01:01 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
mno neviem... ja by som povedal, ze minimalne ten print musi byt podmieneny:
perl -pE 'if(/\/path\/img/){print $_;s{/path/img}{/path/ABC}g;}' <vstup %gt;vystup
12.1.2012 01:03 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
resp. pre lepsiu citatelnost:
perl -pE 'if(m{/path/img}){print $_;s{/path/img}{/path/ABC}g;}' <vstup >vystup
wamba avatar 12.1.2012 01:11 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Pravda, tak třeba

perl -pE 'my $radek=$_; print $radek if s{/path/img}{/path/ABC}g' <vstup >vystup
This would have been so hard to fix when you don't know that there is in fact an easy fix.
12.1.2012 00:23 nikdo
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je to sice dost hnusné řešení a určitě přijde někdo s elegantnějším a univerzálnějším, ale mně to funguje:
for i in *.html ; do
  sed -r -i s/"^(<a href=\"\/path\/)([a-zA-Z0-9]+)(.jpg\".*src=\"\/path\/)(\\2)(_nahled.jpg\".*)$"/"\\0\n\\1ABC\\3ABC\\5"/ $i
done
Samozřejmě by to bylo nutno před použitím ještě trochu upravit dle tvých konkrétních dat, nevím, jaké se tam okolo vyskytuje HTML, tak aby se to třeba nechytlo na nějaký jiný řádek apod.

Základní idea tohoto řešení je to, že v druhé části příkazu s/// můžeš použít reference na jednotlivé matchnuté části z první části příkazu: \0 je celý matchnutý řádek, \1 až \5 pak jednotlivé části vymezené kulatými závorkami. Nový řádek je klasicky \n.
13.1.2012 10:26 loupak
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://www.grymoire.com/Unix/Sed.html
tady najdete vsechno co potrebujete
13.1.2012 21:13 nikdo
Rozbalit Rozbalit vše Re: Nahrazeni textu v html souborech
Díky za ten odkaz, velice užitečné!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.