Newsgroup: it.comp.os.linux.iniziare
Titolo: regex (posix) matchare stringa con almeno 10 lettere maiuscole

Data una serie di stringhe, con frasi, parole varie, numeri, virgole, parentesi
e di tutto di più, matchare quelle che contengono almeno 10 lettere maiuscole
messe in qualsiasi ordine.
 
Non script, ma sola regex.
Sto impazzendo e non ne vengo a capo.
Qualcuno mi dia una dritta per favore.
 
 
-- 
I can't use Windows.  My cat ate my mouse.

 Qualcuno mi dia una dritta per favore.
 
Certamente c'e' qualcosa che mi sfugge, puoi precisare? perche' la
seguente riga di comando me li da' al volo; ma e' troppo semplice
ed elementare, dov'e' l'inghippo?
 
grep "[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*\
[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*[[:upper]].*" ORIGINE
 
(se cerchi solo ascii non esteso cambi con [A-Z])
 
-- 
Yoda
 

Addi' 08 ago 2021 21:45:33, Yoda scrive:

Mancavano i due punti, ma tanto era ovvio (l'ho riscritto per completezza).


> grep ".*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*\


>> [[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*" ORIGINE
 
Continuo a sbagliare: non serve il ".*" iniziale e neppure il finale.
 
(scusatemi per tutti questi post, devo stare piu' attento ciao a tutti)
 
-- 
Yoda
 

 
 
echo '<line>' | perl -ne '/\p{uppercase}{10,}/ && print $_ '
 
 
-- 
|___|

Addi' 09 ago 2021 00:31:27, enoquick scrive:

Da me questo con perl prende solo 10 consecutive, pero' l'ho provato
dando "cat file_input" al posto di "echo '<line>'" che non capisco ciao
 
Comunque e' equivalente al grep che ho postato, mi sembra molto
molto difficile che sia questo che vuole Umberto.. per dire: lo fa
al volo e a occhi chiusi, ne' con grep, ne' con perl, ma con awk che
conosce a memoria. [ci ho azzeccato, Umberto?]
La sintassi e' praticamente la stessa di grep:
 
awk '/[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*
[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]].*[[:upper:]]/' input_file
 
-- 
Yoda
 

In date: Mon, 09 Aug 2021 03:45:56 on group: it.comp.os.linux.iniziare,

Di domenica avevo la testa in spiaggia, ma costreto a casa. Non ero connesso al cervello!
Mi ostinavo in cose tipo: .[A-Z][A-Za-z0-9\ \,\.\-\!]{10,}.
 
Ok, funzia, semplificata:
([[:upper:]].*){10,}
 
Mi serve la regola da mettere in tin, per castrare i post tutti maiuscoli che
ci sono in it.discussioni.consumatori.tutela.
 
Il test lo facevo con un file fittizio, purtroppo tin va in crash pcre con il
test uguale o superiore a 18 caratteri!
 
Thank!
 
-- 
BREAKFAST.COM
 Halted...Cereal Port Not Responding.

 Thank!
 
Grazie anche a te ciao!
 
P.S. Vedo che le graffe per ripetere le prende anche grep, con la
stessa sintassi.. e io che credevo di saper tutto di grep:-((
 
-- 
Yoda
 

In date: Mon, 09 Aug 2021 14:21:27 on group: it.comp.os.linux.iniziare,

Anche sed prende le parentesi, ma bisogna stare attenti ad 'escaparle' con \{ e
}\.
 
Guardati, ma forse ne avevo già parlato tempo fa:
 
https://dy1an.xyz/arapsware
 
        pure-bash-bible
        pure-sh-bible
 
e le altre pazze cose che fa questa persona in bash!
 
Il suo demo 'pxltrm' lo sto ampliando a tempo perso, in qualcosa di mostruoso
editor ascii-art, con macro, copia-incolla, layers e tanto altro; ora sono ad
oltre 75K di dimensione. Prossimamente, vedrò di pubblicarlo. E' una sfida a
fare tutto esclusivamente con bash e nient'altro!
 
 
-- 
Se Darl McBride [il presidente di SCO] ne fosse incaricato,
probabilmente renderebbe anticostituzionale anche il matrimonio, poiché
chiaramente attenua la normale natura commerciale dell'interazione umana
ed è probabilmente un ostacolo importante alla crescita commerciale
della prostituzione.                                  Linus Torvalds

 Qualcuno mi dia una dritta per favore. 
 
sulla carta dovresti conoscerlo:
 
Mastering Regular Expressions, 3rd Edition
by Jeffrey E.F. Friedl
 
    Length: 544 pages
    Edition: 3
    Language: English
    Publisher: O'Reilly Media
    Publication Date: 2006-08-15
    ISBN-10: 0596528124
    ISBN-13: 9780596528126
 

Il 08/08/21 20:45, Yoda ha scritto:

Si, scusatemi, ho preso una sbando
 
questo e' per contare il numero delle lettere maiuscole in una parola:
 
echo 'aAAnnnnXX' | perl -ne 'my @a=$_=~/\p{upper}/g; print scalar(@a);'
 
 
$ 4
 
Se serve
 
Comunque non si sa ancora quale sia il separatore tra una parola e l'altra
Una non lettera ?
Uno o piu spazi  ?
 
 
 
-- 
|___|

 Uno o piu spazi  ?
 
Spazi, punti, virgole, parentesi, altre lettere minuscole, numeri, se poi sono
anche spammer, anche accentate e lettere straniere.
 
Peccato solo che tin, il programma, vada in errore se aumento il test a 18
maiuscole. Già con il test a 15 fa una pausa di alcuni secondi per processare i
messaggi sul server.
 
 
-- 
I puristi ritengono inopportuno utilizzare driver proprietari sutto Linux,
i masochisti amano utilizzare driver Windows sotto Linux... Twisted Evil

 Uno o piu spazi  ?
 
Con una riga del tutto arbitraria in input, conviene (penso!)
contare quello che togli, cosi' non hai da pensare a nulla:
 
------------------
#! /bin/bash
 
PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | tr -d '[:upper:]' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
 
Esempio per testarla, ciao
 
$: ./contamaius 'hh>IuiksakooxxxooToMRRRbk jjutSS 32144@#@#!46'
8
 
P.S. Lo lascio cosi' magari qualcuno me lo sa dire per qual motivo
tr non sembra aggiornato all'ASCII esteso o meglio all'utf8 (o 32?)
 
Non va, conta solo A..Z, le accentate eccetera tr non le considera
lettere maiuscole. Ci vuole sed.. o perl ariciao
 
CORRIGE
------------------
#! /bin/bash
 
PRIMA="$(echo "$1" | wc -m)"
DOPO="$(echo "$1" | sed 's/[[:upper:]]//g' | wc -m)"
echo "$(( $PRIMA - $DOPO ))"
-------------
 
-- 
Yoda
 

 processare i messaggi sul server.
 
Prova a vedere con la sottrazione che ho postato adesso a Enoquick,
ma con sed perche' tr vede solo le A..Z ascii-128. In confronto alla
riga di awk forse e' piu' veloce ciao
 
Guarda per comodita'/velocita' te la posto senza variabili, cioe'
come penso da dare in pasto a tin:
 
echo "$(( $(cat $1 | wc -m) - $(sed 's/[[:upper:]]//g' $1 | wc -m) ))"
 
Questa la velocita' e' indipendente dal numero ariciao
 
-- 
Yoda
 

Addi' 12 ago 2021 08:35:28, Yoda scrive:

Questa e' ancora meglio, lascia passare solo le maiuscole:
 
sed 's/[^[:upper:]]//g' file_input
 
Pero' anche con questa, come con la precedente, poi bisogna contarle
e allora si perde tempo col test if -ge 18
 
-- 
bye, Yoda
 

 $: ./contamaius 'hh>IuiksakooxxxooToMRRRbk jjutSS 32144@#@#!46'
 
Ciao Yoda.
 
Capisco il tuo fervore, ma come ho già detto più volte, posso mettere solo la
regex, non è possibile altro!
 
----------cut------------
comment=maiuscole
group=*
case=0
score=-1002
subj=([[:upper:]].*){15,}
----------cut------------
 
Il tempo, per processare 300 o più post, dipende solo da come tin, il
programma, gestisce i filtri.
Tre o quattro secondi, prima di aprire il gruppo, sono accettabili.
 
    :)
 
-- 
Non fare domani quello che devi fare oggi, ma soprautto
non fare oggi quello che puoi fare domani...

Addi' 12 ago 2021 14:42:50, BIG Umberto scrive:

Ah adesso capisco, la regexp la dai direttamente a tin. Non capisco
pero' perche' aumenta sensibilmente il tempo quando passi a 18.
 
Hai provato a dargli [ABCDEFGHIJKLMNOPQRSTUVWXYZ] invece di [A-Z]
o [[:upper:]]? perche' guarda che [A-Z] molti comandi la prendono
come equivalente alla [[:upper:]], contro quel che dice la man
pagina.
Si vede - penso - che c'entra il locale ciao e muoviti col tuo
mostruoso editor ascii-art, approfitta che siamo in vacanza!
 
-- 
Yoda
 

 pagina.
 
Si, ho provato.
Usando A-Z, upper o [ABC...Z] non cambia.
 
Ma non è un grosso problema, difficile che qualcuno posti una parola (o più
parole) di oltre 15 caratteri maiuscoli nel soggetto di un post!
 
 
 
-- 
Un tacchino all'agnello: Buona pasqua!
L'agnello al tacchino: Vaffaculo, buon Natale!