Portál AbcLinuxu, 8. května 2025 20:09

Dotaz: awk gsub

10.4.2013 08:54 ZdenekT
awk gsub
Přečteno: 208×
Odpovědět | Admin
V AWK potřebuji v textu nahradit vše, co neodpovídá danému vzoru. Konkrétně, vzor je vždy zobáček následovaný písmenem, např "^x". Čili např. z textu "^aXXXXX^bYY^cZZZZZZ" má zůstat "^a^b^c". Nahradit skupinu znaků pomocí gsub umím, použít negaci na jeden znak také, ale s negací na skupinu znaků si poradit neumím. Díky za případné rady.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Tarmaq avatar 10.4.2013 12:03 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: awk gsub
Odpovědět | | Sbalit | Link | Blokovat | Admin
nejsem uplne expert pres awk, ale tohle mi funguje:
$ echo echo '^aXXXXX^bYY^cZZZZZZ' | awk '{ $0=gensub(/(\^\w)[^^]*/, "\\1", "g"); print $0}'
^a^b^c
Pokud by nebylo nutne pouzit awk, tak sedem takto
echo '^aXXXXX^bYY^cZZZZZZ' | sed 's/\(\^[a-z]\)[^^]*/\1/gi'
^a^b^c
Don't panic!
10.4.2013 13:10 NN
Rozbalit Rozbalit vše Re: awk gsub
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo ^aXXXXX^bYY^cZZZZZZ | awk 'gsub(/[^ \^a-z]/,"",$0) {print}'
Tarmaq avatar 10.4.2013 16:14 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: awk gsub
proc je tam ta mezera? Pro retezec ^abcd^efgh^ijkl nevrati nic, a pro retezec ^aXbX^cYdY^eZfZ to vrati ^ab^cd^ef presto ze by to melo vratit jen ^a^c^e
Don't panic!
10.4.2013 17:14 potato
Rozbalit Rozbalit vše Re: awk gsub
Asi proto, že je problém zadán pouze příkladem, takže to ponechává malá písmena a maže velká, stejně jako v tom příkladu...
10.4.2013 18:04 NN
Rozbalit Rozbalit vše Re: awk gsub
Aby zvyraznila tu negaci, jinak tam byt nemusi. Jelikoz !// nefunguje, da se to take udelat obracene:
echo ^aXXXXX^bxfYY^cDdZZZZZZ | awk 'gsub(/[A-Z]|[A-Z]+[a-z]+[A-Z]+/,"") {print}'

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.