Portál AbcLinuxu, 12. května 2025 06:26

Dotaz: (Jak zjistit) počet náhrad, které provedl sed

11.6.2009 06:17 Robert Krátký | skóre: 94 | blog: Robertův bloček
(Jak zjistit) počet náhrad, které provedl sed
Přečteno: 242×
Odpovědět | Admin
Lze nějak zjistit (bez použití dalších nástrojů), kolikrát příkaz s (GNU sed) provedl nahrazení?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.6.2009 08:45 selfrule | skóre: 4
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Odpovědět | | Sbalit | Link | Blokovat | Admin

Můžeš prosímtě dotaz trochu upřesnit, příp. napsat konkrétní využití?

11.6.2009 08:56 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Potřebuji vědět, kolik substitucí provede libovolný příkaz typu
sed 's/regexp/náhrada/g'
Ta informace je pouze pro mě - nechci ji nijak využívat ve skriptu, pokud je to, na co se ptáš.
11.6.2009 09:35 Ash | skóre: 53
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podle mne zásadní věc je, jak tuto informaci sdělit? Jinak by to šlo co mne napadá akorát sedovskou aritmetikou jak je popsána třeba v info sed, tedy při každé úspěšné náhradě si někam odskočit a tam čarovat s čísly (přičíst jedna). Jako vzor by mohlo soužit "numbering non-blank lines". Následující příklad nahrazuje foo za baz a při každé náhradě na stderr vypíše kolikáté nahrazení to je.
#!/bin/sed -nf

s/foo/baz/g
Tf

x
/^$/ s/^.*$/1/
G
h
s/.*\n\(.*\)/\1/p
x
s/\n.*$//
w/dev/stderr
/^9*$/ s/^/0/
s/.9*$/x&/
h
s/^.*x//
y/0123456789/1234567890/
x
s/x.*$//
G
s/\n//
h

b

:f
p
Asi by to šlo nějak poštelovat, aby to vypsalo třeba jen na konci a celkově odladit, ale nechce se mi s tím teď babrat, zas tak skriptovat v sedu neumím.
11.6.2009 11:26 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Uff, složité :-( Ale dík za inspiraci.
11.6.2009 12:23 Ash | skóre: 53
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Navíc to počítá jen řádky kde se něco nahrazovalo, ne konkrétní nahrazení při použití g (global), což nevím jestli jste potřeboval. Každopádně je to zajímavý problém :)
11.6.2009 15:01 l4m4
Rozbalit Rozbalit vše Re: (Jak zjistit) počet náhrad, které provedl sed
Počítat nahrazení na řádku lze tak, že nahrazuješ bez /g a při úspěšném nahrazení to odskočíš zkusit znovu (a přitom případně provedeš nějakou jinou akci). Není to samozřejmě ekvivalent /g, protože to funguje pouze nemůže-li se již zpracovaný text znovu matchnout.

Je to sice zajímavý problém, ale ne z těch, které by bylo praktické řešit v sedu...

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.