Portál AbcLinuxu, 17. července 2025 22:36
555.32 nejaky text 2616486 nejaky text -868451 nejaky text
vystup: x nejaky text x nejaky text x nejaky text
A ještě jeden dotaz, v databázi jsou souřadnice bodů (bohužel ne vždy jako číslice, ale jako libolná změť čehokoliv), jako příklad A[0,1] B[3,x] C[nezname_souradnice]. Šlo by nějakou posloupností klasických bash nástrojů dojít k tomuto (oznaceni zacatku a konce napriklad retezci "souradnice" a "konec")?
vystup: A[0,1] nejaky text B[3,x] nejaky text C[nezname_souradnice]
vstup: souradnice[0,1]konec nejaky text souradnice[3,x]konec nejaky text souradnice[nezname_souradnice]konec
Děkuji za všechny nápady a návrhy, jak dojít ke kýženému výsledku.
Jen přispěju nějakými těmi regexy pro sed.
Neověřoval jsem správnost. Raději bych to vůbec ještě přepsal v AWK nebo Perl, protože je ještě nutné něco doplnit, aby se nanahrazovala čísla obsažená v textové části, pokud tam vůbec nějaká jsou, ale nechce se mi brouzdat po dokumentaci.
sed 's/[+-]\?[0-9]\{1,7\}[.]\?[0-9]\{1,3\}\?/x/g'Vsechny vyskyty retezcu /g ktere muzou zacinat + nebo - nasleduje 1 az 7 cifer dale muze byt tecka a muze nasledovat dalsich 1 az 3 cifer. Ten druhy:
sed 's/[A-Z]\[/souradnice\[/g' sed 's/\]/\]konec/g'Vsechny vyskyty retezcu, ktere zacinaji velkym pismenem a otevyraci hranatou zavorkou nahrad retezcem souradnice a otevyraci zavorkou. Vsechny vyskyty retezce, ktery obsahuje hranatou uzavyraci zavorkou nahrad uzavyraci hranatou zavorkou a retezcem lkonce. Asi by se oboji dalo vylepsit, ale oboji funguje.. NN
echo "A[1,2] B[3,x] C[souradnice]" | sed 's/[A-Z]\[/souradnice\[/g';
výstup: souradnice[1,2] souradnice[3,x] souradnice[souradnice]
----------------------------------------------------------------------------------------
test: echo "A[1,2] b[3,x] C[souradnice]" | sed 's/[A-Z]\[/souradnice\[/g';
výstup: souradnice[1,2] souradnice[3,x] souradnice[souradnice]
----------------------------------------------------------------------------------------
Zkoušel jsem vícero způsobů kombinace malých a velkých písmen a bash mi nedokáže rozeznat malá a velká písmena. Můžete mi, prosím, poradit, kde je problém???
locale
) mají LC_COLLATE takové, že řazení velkých/malých písmen je (nepříklad) aAbBcC, potom A-Z zahrnuje velká i malá písmena (krom malého a).
Demo:
bash$ locale | grep LC_COLLATE LC_COLLATE="cs_CZ.UTF-8" bash$ echo "a[1,2] b[3,x] C[souradnice]" | sed 's/[A-Z]\[/souradnice\[/g'; a[1,2] souradnice[3,x] souradnice[souradnice] bash$ echo "A[1,2] Z[3,x] C[souradnice]" | sed 's/[A-z]\[/souradnice\[/g'; souradnice[1,2] Z[3,x] souradnice[souradnice]Řešení odolné proti různým řazením:
echo "A[1,2] b[3,x] C[souradnice]" | sed 's/[[:upper:]]\[/souradnice\[/g';
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.