Portál AbcLinuxu, 10. května 2025 05:31
Řešení dotazu:
$ cat foo 12234566 0.0987 $ sed -r 's#^[[:digit:]]+$#<span class="int">\0</span>#' foo <span class="int">12234566</span> 0.0987 $ sed -r 's#^[[:digit:]]*\.[[:digit:]]+$#<span class="real">\0</span>#' foo 12234566 <span class="real">0.0987</span>
s/regexp/replacement/misto lomitek jako oddelovace jsem pouzil #, protoze se mi to hodi abych nemusel "escapovat" lomitko v "replacementu".
^[[:digit:]]+$
, coz znamena ze to matchne ty radky, ktere od zacatku az do konce obsahuji 1-n znaku tridy [:digit:].<span class="int">\0/span>, tedy nahradi to presne timto, s tim ze misto \0 bude pouzit cely matchnuty radek. V druhem pripade je to velmi podobne, az na to ze regexp je trochu slozitejsi:
^[[:digit:]]*\.[[:digit:]]+$
#123.456# #321# ...čímž se čísla jednoznačně vymezí (jsou jasné začátky a konce), a pak se jednotlivé případy převedou různými regulárními výrazy, které budou matchovat i ty značky
s/#([0-9]*.[0-9]+)#/.../g s/#([0-9]+)#/.../g ...Třetí možnost je napsat regulární výrazy, které zpracovávají i okolní znaky, a případně je nezmeněné vracejí do streamu:
s/(^|[^.0-9])([0-9]+)([^.0-9]|$)/\1<<\2>>\3/gcož je ale opět rychle komplikuje.
[[:lower:]]
, [[:upper:]]
a [[:alpha:]]
, případně v kombinaci s LC_CTYPE=C
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.