Portál AbcLinuxu, 14. května 2025 19:55

Dotaz: perl oneliner

13.3.2017 11:42 Terka | skóre: 13
perl oneliner
Přečteno: 292×
Odpovědět | Admin
ahoj, poradi prosim nekdo jak pomoci perl onelineru udelat nasledujici:

Puvodni radek umim rozsekat na 3 casti ( )( )( ) a odkazovat se na ne pomoci \1 \2 a \3 chtela bych ale v casti \1 provest dalsi nahrazovani, napr nahradit mezery a tecky za podtrzitka. Jak toto provest? Dekuju!
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.3.2017 12:34 NN
Rozbalit Rozbalit vše Re: perl oneliner
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud chces prepsat udaje pouze v prvnim bloku, kde bloky jsou logicky oddelitelene, tak je proste neoddeluj a napis vyraz ciste pro upravu, zbytek retrezce zustane bez zmeny.
13.3.2017 15:11 Terka | skóre: 13
Rozbalit Rozbalit vše Re: perl oneliner
diky za odpoved, bohuzel nevim jak na to, jak to myslis.
13.3.2017 15:54 NN
Rozbalit Rozbalit vše Re: perl oneliner
Beru zpet..
13.3.2017 12:54 graviton
Rozbalit Rozbalit vše Re: perl oneliner
Odpovědět | | Sbalit | Link | Blokovat | Admin
S pomocí s///e (eval modifikátor) by šla vymyslet nějaká příšernost typu

echo a.b.c d.e.f g.h.i | perl -pe 's/(.*) (.*) (.*)/($1 =~ tr| .|__|r)." $2 $3"/e'

Což ovšem neznamená, že to je dobrý nápad to takhle dělat...
13.3.2017 15:23 Terka | skóre: 13
Rozbalit Rozbalit vše Re: perl oneliner
diky za opoved, tohle by asi bylo pro me rozumne. Bohuzel mi to zatim nefunguje, pokud bys mel prosim cas zprovoznit tento priklad, budu rada. PS: rada uslysim i lepsi napad jak na to diky!
13.3.2017 15:57 Terka | skóre: 13
Rozbalit Rozbalit vše Re: perl oneliner
diky vsem, uz vim, je to potreba priradit promenne, ten $1 je asi jen pro cteni.
13.3.2017 19:18 RM
Rozbalit Rozbalit vše Re: perl oneliner
Nechá se to udělat snadno i bez eval:
perl -ne '@a=/(..)(..)(..)/; @a && ($a[1] =~ s/\./\.\.\./g); print "@a"'
13.3.2017 19:40 RM
Rozbalit Rozbalit vše Re: perl oneliner
Omlouvám se, trochu jsem se unáhlil, přes pole jedině tak:
perl -ne '@a=/(..)(..)(..)/g; $cnt++%3 || s/\./\.\.\./g foreach @a; print "@a"'
nahradí v prvním (..) každou tečku za tři tečky.

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.