Van egy ilyen formátumú szerzői listám:
Abdrafikova, A
Akhmadullina, R M
van der Meulen, R T
Van der Bruggen, C O
Spilt, J L és mtsai
Ebből szeretnék olyat, hogy az egy betűs tagok után legyen egy pont, azaz:
Abdrafikova, A.
Akhmadullina, R. M.
van der Meulen, R. T.
Van der Bruggen, C. O.
Spilt, J. L. és mtsai
Így próbáltam meghatározni, hogy csak az egy tagúak után legyen pont:
cat myfile | sed 's/\(\ [A-Za-záéíóöőúüű]\{1\}\)/\1./g'
De elcseszi a hollandokat - joggal:
van d.er M.eulen, R. T.
Van d.er B.ruggen, C. O.
Hogyan jelölhetem ki, hogy valóban csak az egyedül álló betűk után tegyen pontot?
- 1734 megtekintés
Hozzászólások
sed "s/\b\([A-Za-z]\)\b/\1./g" /tmp/x.txt
Abdrafikova, A.
Akhmadullina, R. M.
van der Meulen, R. T.
Van der Bruggen, C. O.
Spilt, J. L. és mtsai
- A hozzászóláshoz be kell jelentkezni
Ezt a \b dolgot nem ismertem. Köszönöm!
- A hozzászóláshoz be kell jelentkezni
(Ne zavarjon, hogy ez PCRE bővítmény, és GNU-sed-ben működik, másban nem is fog. Illetve hát perl-ben is fog.)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
A gensub (a dok szerint) ugyan nem gnu-only, de a mawk azért nem tudja, sőt az AIX-é sem, pedig ilyenkor kezes:
awk '{ print gensub( /\<([A-Za-z])\>/, "\\1.", "g")}'
- A hozzászóláshoz be kell jelentkezni
Azt nem csodálom, mert rendes helyen azt gsub-nak híjják, és mawk-ban is van. És csak picit kellene átírni a kódot így első ránézésre :-)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
A gsub() mindenhol létezik (gawk-ban is), csak icipicit kevesebbet (és máshogy) tud, mint a gensub(), amiről a gawk manja is csak első látásra nem állítja, hogy GNU találmány, amúgy meg ha tényleg kinyitom a szemem, láthatom, hogy ott van egy hosszú (és egyre hosszabb, ahogy szaborodnak a gawk függvényei) sor közepén a GNU EXTENSIONS szekcióban.
A nawk meg naná, hogy szintén definiálja: ha az /etc/alternatives egyerűen a gawkra linkeli a nawkot. Amúgy meg nem, vagyis mégis GNU-only.
Duplán benéztem.
- A hozzászóláshoz be kell jelentkezni
Sajnos a dolog ott bukott el, hogy a \< \> a vi-ban épp létező szó-elejet/szó-vége, de nem szabványos RE tag, és mint ilyen awk-ban sem működik :-( Ha lenne valami szabványos ERE a szó-eleje/vége illeszkedésre, akkor valóban lehetne így:
awk '{gsub( /\<[a-zA-Z]\>/, "&." ); print}' <<< 'alma a fa a latt'
de ennek hiányában az egyébként szellemes ötlet bukik.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Az nem baj, ha awk?
#!/usr/bin/awk -f
{
for (i=1; i<=NF; i++) {
if (length($i)==1) {
printf("%s.", $i);
} else {
printf("%s", $i);
}
if (i==NF) {
printf("\n");
} else {
printf(" ");
}
}
}
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem lenne baj, de elegánsabb az előző. Azért a segítséget köszönöm.
- A hozzászóláshoz be kell jelentkezni
picit lehet egyszerusiteni:
awk '{ for (i=1; i<=NF; i++) { if ( length($(i))==1 ) $(i)=$(i) "."; } print; }'
de valoban elegans a regexp.
- A hozzászóláshoz be kell jelentkezni
Nem tudtam, hogy a record buffert szabad büntetlenül módosítani. Úgy értem, bennem felmerült, hogy ha hozzáadok az egyik mezőhöz egy karaktert, akkor esetleg a következő mezőt rongálja szét, de ezek szerint okosan csinálja az awk.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
(Mezők mellékhatásként csak akkor módosulnak két rekordbeolvasás között, ha $0 értékét módosítod, egyébként mit sem tudnak egymásról.)
- A hozzászóláshoz be kell jelentkezni