Portál AbcLinuxu, 11. května 2025 06:45
Zdravim chtel jsem se zeptat jak by se dalo udelat nasledujici:
Petr Novak
jak z tohoto radku vyseknout prijmeni kdyz vim ze mezi krestnim jmenem a prijmenim je mezera? ja sem zkousel neco takoveho, ale nefunguje to
sed 's/^[[a-zA-Z]*[:space:]*\([:alnum:]+\)]+$/\1/g'
Dekuji
echo 'Petr Novak' | awk '{print $2;}'
jj to by mohlo byt ale co kdyz by bylo zadany jen to prijmeni? jako ze seznam je
Petr Novak
Novak
Roman Sova
takze to jmeno neni povinny...nekdy tam bejt muze a nekdy ne....
jj toto by slo, jen mam dotaz jak by se to potom udelalo kdyby za tim prijmenim jeste neco nasledovalo...napr
Petr Novak Praha Hradcany 22
tak aby to vypsalo vse od prijmeni do konce radku, tedy:
Novak Praha Hradcany 22
$ cat foo Josef;Novak;Praha;Jecna 30; Vaclav;Kopecky;Praha;; ;Novak;;; $ cat foo | cut -d ";" -f 2 Novak Kopecky NovakPokud nemuzes rict, kolik slov ma presne obsahovat jmeno, prijmeni, adresa atp., tezko budes zjistovat, ktere z nich je prijmeni..
sed -r
a pak jen + a (...).
Kromě toho [:space:]* by asi mělo být [[:space:]]+.
Pak už se to natolik liší od toho, cos sem napsal, že těžko říci...
no ale kdyz tam bude [[:space:]]+ tak to bude znamenat ze tam bude alespon jedna mezera....a tam ta mezera byt nemusi kdyz je zadano jen prijmeni.... Muzou nastat dve situace, bud je zadano krestni jmeno nebo neni
Petr Novak
nebo
Novak
takze ten vyraz muze zacit pismeny, ktere mohou byt nasledovany libovolnym poctem mezer (toto by melo pokryt pripadne zadani krestniho jmena a mezer mezi prijmenim) a za mezerami nasleduje posloupnost nebilych znaku(prijmeni), ktere si musi vyraz zapamatovat a pak je vypsat...
sed -re 's/(.*[[:space:]])?([^[:space:]]+)$/\2/' sed -e 's/\(.*[[:space:]]\)\?\([^[:space:]]\+\)$/\2/' while read x; do echo "${x##* }"; done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.