Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: psychogenius 02 Května 2012, 10:21:33

Název: Vlozenie znaku za kazdu X-tu medzeru [VYRIESENE]
Přispěvatel: psychogenius 02 Května 2012, 10:21:33
Zdravim potreboval by som Vlozit & za kazdu 9-tu medzeru v texte. Skusal som to cez sed :
sed 's/ /\&/9'
to to vlozi spravne ale nejde to nejako neviem dojst na sposob aby to robili kazdu 9 medzeru ked dam"
sed 's/ /\&/9g'
tak to vlozi za 9 medzeru a potom za vsetky ...


Viete mi nejako poradit ?
Název: Re:Vlozenie znaku za kazdu X-tu medzeru
Přispěvatel: GdH 02 Května 2012, 11:01:45
Třeba takto:

Kód: [Vybrat]
sed 's/\(\([^ ]* \)\{9\}\)/\1\&/g'
Název: Re:Vlozenie znaku za kazdu X-tu medzeru
Přispěvatel: psychogenius 02 Května 2012, 11:11:21
Diky funguje to skvelo :D Ked budes mat cas tak by si mi vedel rozpisat ze preco a ako to tak funguje ? 
Název: Re:Vlozenie znaku za kazdu X-tu medzeru [VYRIESENE]
Přispěvatel: GdH 02 Května 2012, 12:40:55
'[^ ]* ' odpovídá libovolnému řetězci, který končí mezerou, ale neobsahuje žádnou další. [^ ] znamená jakýkoliv znak, krom mezery - stříška neguje výčet povolených znaků.
Ty vnější kulaté závorky definují subřetězec, který pak mohu použít dále pomocí \1
Vnitřní kulaté závorky obalují výraz, kterému ve složených závorkách definuju počet opakování

S GNU sed (který je v ubuntu) to lze zapsat přehledněji bez těch escape znaků díky přepínači -r:

sed -r 's/(([^ ]* ){9})/\1\&/g'