Portál AbcLinuxu, 3. srpna 2021 13:15




Dotaz: BASH: pokročilé děleni řetezců

11.9.2005 15:57 © | skóre: 37 | blog: escaped
BASH: pokročilé děleni řetezců
Přečteno: 209×
Odpovědět | Admin
Dobrý den,

Využívám vlastností BASHe při parsování řetezců následujícím způsobem:
DATA="Ahoj&Svete!"

while IFS="&" read A B ; do

        echo "$A $B" 
done <<< $DATA

# OUTPUT: "Ahoj Svete!"
Problémem je, že do proměnné IFS nelze vložit řetězec, ale vždy jen jeden znak. Potřeboval bych však psát něco takového:
DATA="AhojANDSvete!"

while IFS="AND" read A B ; do

        echo "$A $B" 
done <<< $DATA

# OUTPUT: " hojANDSvete!"
Z výstupu jasně plyne, že IFS může obsahovat jen jeden znak. Rád bych měl funkci SPLIT, která by byla jakýmsi "workaroundem" a umožnila mi asi takovýto zápis:
DATA="AhojANDSvete!"

while SPLIT "AND" A B ; do

        echo "$A $B" 
done <<< $DATA

# OUTPUT: "Ahoj Svete!"
Nebo nějak podobně. Jde mi o tu funkci SPLIT.

Bohužel se mi ne a ne podařit takovou funkci v čistém BASHi napsat. AWK, SED ani jiný nástroj z různých důvodů nemohu použít. Jen čistý BASH. Děkuji za vaše nápady.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.9.2005 16:10 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: BASH: pokročilé děleni řetezců
Odpovědět | | Sbalit | Link | Blokovat | Admin
No to je pěkná pakárna :-) V awku je to trivka (awk -F AND), v bashi mě napadá jedině
string="${string//AND/|}"
IFS="|"
ale nesmíš v tom řetězci mít |, což asi máš, jinak by ses takhle neptal...
11.9.2005 16:13 © | skóre: 37 | blog: escaped
Rozbalit Rozbalit vše Re: BASH: pokročilé děleni řetezců
Vidíš. Tak takhle triviální řešení mě nenapadlo. Je vidět, že stále nejsem sto BASH efektívně využít. Asi strávím zbytek dne zopakováním man bash.

Děkuji.

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.