Re: query complicata con espressioni regolari
chiaro... da sola non serve a nulla, ma l' ho aggiunta per evitare che inviassero al mailer indirizzi email da 65000 caratteri e mandarlo in crash o cose del genere, inoltre i caratteri ammessi sono [a-z0-9.-_@] Il 14/02/15, Lorenzo Breda ha scritto: > Il giorno sab 14 feb 2015 12:14 MaX ha scritto: > > > > inoltre l'email puó essere inviata solo da una form html specifica con > una lunghezza di numero di caratteri limitata e un set di caratteri di > base. > > > > Questa, senza il resto di ciò che hai scritto, non sarebbe una buona > misura di sicurezza: è banale mandare in get o post dei dati all'action del > form senza alcuna di queste limitazioni. > > -- > Lorenzo Breda > -- ciao, MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/caeyavmut3m+qzozc6hm0pgo+vz9phw7_puzxqgswu+rxfh-...@mail.gmail.com
Re: query complicata con espressioni regolari
Il giorno sab 14 feb 2015 12:14 MaX ha scritto: inoltre l'email puó essere inviata solo da una form html specifica con una lunghezza di numero di caratteri limitata e un set di caratteri di base. Questa, senza il resto di ciò che hai scritto, non sarebbe una buona misura di sicurezza: è banale mandare in get o post dei dati all'action del form senza alcuna di queste limitazioni. -- Lorenzo Breda
Re: query complicata con espressioni regolari
Il 14/02/15, Gian Uberto Lauri ha scritto: > > Un ultima cosa. Lo script per cambiare le password, così come è, va bene se > è solo se > è uno shell script via invocato via riga di comando da te. Se lo dai anche > in mano > anche a me io per lo meno ti cancello tutte le password :) :) :) (no, certi > atti vandalici > gratuiti non hanno senso, per me non vale la pena perderci tempo). Dicono > che ci > siano cose chiamate sql injections :) :) :). E non avete idea di cosa può > fare il più > incapace degli script kid col comando sqlmap. non c' è pericolo per questo... è una funzione di un robot per la richiesta di passwd nueve. Tu mandi una email vuota con un indirizzo email, e lui ti rispedisce una passwd allo stesso indirizzo. Il testo contenuto non viene neppure preso in considerazione, per cui anche a mettere un codice malizioso nell' email, non succede nulla inoltre l'email puó essere inviata solo da una form html specifica con una lunghezza di numero di caratteri limitata e un set di caratteri di base. Per finire l' indirizzo email viene validato prima di essere usato, in modo da non impallare il mailer Non dico che sia a prova di bomba, ma la vedo dura entrare da li. cmq grazie per interessarti. -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/caeyavmsmxw9seymeezwqfeo+6exvnq4hvzav81rnqeudgo+...@mail.gmail.com
Re: query complicata con espressioni regolari
Il 14/02/15, Gian Uberto Lauri ha scritto: > Scusate il top quoting. > > Quello che subito non mi piace di questo script è che apri e chiudi troppe > volte la > connessione si, anche a me non piace molto... per ora ho fatto un tes con 10.000 records e funziona, ma non è che sisal il massimo > Se ti tirassi fuori tutti i record in un CSV con una select unica > logicamente simile a buona idea... non ci avevo pensato! :) ciao MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/CAEyAVmubMU7eS-pK=vexrmh1m8c37s6hsu793pljhr27agh...@mail.gmail.com
Re: query complicata con espressioni regolari
Scusate il top quoting. Quello che subito non mi piace di questo script è che apri e chiudi troppe volte la connessione Se ti tirassi fuori tutti i record in un CSV con una select unica logicamente simile a select post_id, post_username, post_text from phpbb_posts in cui concateni in modo opportuno i valori delle colonne in modo da avere un CSV valido, facessi la tua elaborazione creando un file contenente una serie di statement di update e alla fine processassi tutti gli statement con una sola invocazione del comando mysql, beh penso che con 400.000 record la differenza si dovrebbe sentire anche se mysql contatta il server su 127.0.0.0 o Unix pipe. Poi arricchirei la query per vedere se riesco a trovare i post scritti dall'utente Pincopanco contenenti la stringa "[quote]Pincopanco". Le ricerche full text usualmente non sono il massimo della forza di un DB - rispetto ad altri tipi di match - ma mi pare che abbiano arricchito i DB di funzioni diverse da live fatte proprio per la ricerca di pattern nei clob. Non mi piacciono tantissimo nemmeno i trigger. Io userei awk. Mi sa che te la cavi con meno processi. Se però il testo del post contiene degli casca il palco dei CSV che hanno un solo record per riga. In quel caso mi ricupererei il sorgente dello script ad di Kernighan e Pike e vedrei di sfruttare quello - e magari le stored procedure di mysql - per fare una connessione al DB per leggere i dati ed una per scriverli. Un ultima cosa. Lo script per cambiare le password, così come è, va bene se è solo se è uno shell script via invocato via riga di comando da te. Se lo dai anche in mano anche a me io per lo meno ti cancello tutte le password :) :) :) (no, certi atti vandalici gratuiti non hanno senso, per me non vale la pena perderci tempo). Dicono che ci siano cose chiamate sql injections :) :) :). E non avete idea di cosa può fare il più incapace degli script kid col comando sqlmap. -- Gian Uberto "saint" Lauri inviata da un tablet > On 14 Feb 2015, at 02:30, MaX wrote: > > ok, mi riposnto da solo... ecco lo scrit funzionante... non ho ancora > fatto le prove di carico... ma ad occhio 癡 rapido, per lo meno nei > test > > -- > > #!/bin/bash > #exit > source config.conf > > max_post_id=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM > phpbb_posts;" > ) > #" > max_post_id=$(echo $max_post_id | sed 's|^post_id ||') > echo max_post_id=$max_post_id # numero da usare per il ciclo for o while > > # solo per test test > #max_post_id=$1 > > while [ $max_post_id -gt 0 ]; do # ciclo while ecluso per test >post_username=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE > post_id= $max_post_id;") >post_username=$(echo $post_username | sed 's|^post_username ||') >echo > "###" >echo max_post_id=$max_post_id >echo post_username=$post_username > >post_text=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE > post_id > = $max_post_id;") >post_text=$(echo $post_text | sed 's|^post_text ||') > > #echo $post_text > >Trigger=$(echo $post_text | sed 's||\n|g' | sed > "s|\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|" > | grep AA#AA) > #echo Trigger1=$Trigger > >if [ -z $Trigger ]; then >Trigger=$(echo $post_text | sed "s|Data originale: \([0-9-]*\) > \([0-9:]*\),\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]|AA#AA|I" | sed 's||\n|g' | grep AA#AA ) > #echo Trigger2=$Trigger >fi >if [ -z $Trigger ]; then >Trigger=$(echo $post_text | sed "s|Data originale: \([0-9-]*\) > \([0-9:]*\),\[quote\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]|AA#AA|" | sed 's||\n|g' | grep AA#AA | uniq) > #echo Trigger3=$Trigger >fi >if [ $Trigger = "AA#AA" ] 2>/dev/null ; then >new_post_text=$(echo $post_text | sed > "s|\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]||I" | sed 's|\"|\\"|g') >new_post_text=$(echo $new_post_text | sed "s|Data originale: > \([0-9-]*\) \([0-9:]*\),\[quote\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]|Data Originale: \1 \2|I" | sed 's|\"|\\"|g' > ) >new_post_text=$(echo $new_post_text | sed "s|Data originale: > \([0-9-]*\) > \([0-9:]*\),\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]|Data Originale: \1 \2|I") >new_post_text=$(echo $new_post_text | sed > 's|\[url-local:\([a-zA-Z0-9]*\)\]attachment/\([a-zA-Z0-9_#&%.;]*\)\[/url-local:\([a-zA-Z0-9]*\)\]||') > #echo $new_post_text > mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e > "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = > \"$max_post_id\"" >else >echo " >
Re: query complicata con espressioni regolari
ok, mi riposnto da solo... ecco lo scrit funzionante... non ho ancora fatto le prove di carico... ma ad occhio è rapido, per lo meno nei test -- #!/bin/bash #exit source config.conf max_post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;" ) #" max_post_id=$(echo $max_post_id | sed 's|^post_id ||') echo max_post_id=$max_post_id # numero da usare per il ciclo for o while # solo per test test #max_post_id=$1 while [ $max_post_id -gt 0 ]; do # ciclo while ecluso per test post_username=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE post_id= $max_post_id;") post_username=$(echo $post_username | sed 's|^post_username ||') echo "###" echo max_post_id=$max_post_id echo post_username=$post_username post_text=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE post_id = $max_post_id;") post_text=$(echo $post_text | sed 's|^post_text ||') #echo $post_text Trigger=$(echo $post_text | sed 's||\n|g' | sed "s|\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|" | grep AA#AA) #echo Trigger1=$Trigger if [ -z $Trigger ]; then Trigger=$(echo $post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|I" | sed 's||\n|g' | grep AA#AA ) #echo Trigger2=$Trigger fi if [ -z $Trigger ]; then Trigger=$(echo $post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|" | sed 's||\n|g' | grep AA#AA | uniq) #echo Trigger3=$Trigger fi if [ $Trigger = "AA#AA" ] 2>/dev/null ; then new_post_text=$(echo $post_text | sed "s|\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]||I" | sed 's|\"|\\"|g') new_post_text=$(echo $new_post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|Data Originale: \1 \2|I" | sed 's|\"|\\"|g' ) new_post_text=$(echo $new_post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|Data Originale: \1 \2|I") new_post_text=$(echo $new_post_text | sed 's|\[url-local:\([a-zA-Z0-9]*\)\]attachment/\([a-zA-Z0-9_#&%.;]*\)\[/url-local:\([a-zA-Z0-9]*\)\]||') #echo $new_post_text mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = \"$max_post_id\"" else echo " lascio inalterato" fi let max_post_id=max_post_id-1 done exit -- ciao MaX 2015-02-13 21:08 GMT+01:00, MaX : > ho fatto alcune correzzioni a questa bozza. > Quello che mi scoccia è che lavorando cosí va a aggiornare tutti i > post del database, sia che siano da modificare o meno. > Bisognerebbe trovare il modo per detectare che il post è da moficicare > e poi mettere una condizione if > > --- > > #!/bin/bash > source config.conf > > max_post_id=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM > phpbb_posts;") > #" > max_post_id=$(echo $max_post_id | sed 's|^post_id ||') > echo max_post_id=$max_post_id # numero da usare per il ciclo for o while > > # solo per test test > #post_id=10 > > while [ $max_post_id = 0 ]; do # ciclo while ecluso per test > post_username=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE > post_id= $max_post_id;") > post_username=$(echo $post_username | sed 's|^post_username ||') > echo post_username=$post_username > > post_text=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE > post_id= $max_post_id;") > post_text=$(echo $post_text | sed 's|^post_text ||') > > new_post_text=$(echo $post_text | sed > "s|\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]||I") > echo $new_post_text > mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e > "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = > \"$max_post_id\"" > > let max_post_id=max_post_id-1 > done > > exit > > > > > --- > > Il 13/02/15, MaX ha scritto: >> opss rileggento ho visto un errore: >> >> while [ $post_id = 0 ]; do --> while [ $max_post_id = 0 ]; do >> >> Il 13/02/15, MaX ha scritto: >>> pensavo di fare una cosa del genere, ma si tratta di 400.000 post, e >>> non si se è abbastanza veloce >>> >>> -- >>> source config.conf >>> >>> post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSW
Re: query complicata con espressioni regolari
ho fatto alcune correzzioni a questa bozza. Quello che mi scoccia è che lavorando cosí va a aggiornare tutti i post del database, sia che siano da modificare o meno. Bisognerebbe trovare il modo per detectare che il post è da moficicare e poi mettere una condizione if --- #!/bin/bash source config.conf max_post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;") #" max_post_id=$(echo $max_post_id | sed 's|^post_id ||') echo max_post_id=$max_post_id # numero da usare per il ciclo for o while # solo per test test #post_id=10 while [ $max_post_id = 0 ]; do # ciclo while ecluso per test post_username=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE post_id= $max_post_id;") post_username=$(echo $post_username | sed 's|^post_username ||') echo post_username=$post_username post_text=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE post_id= $max_post_id;") post_text=$(echo $post_text | sed 's|^post_text ||') new_post_text=$(echo $post_text | sed "s|\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]||I") echo $new_post_text mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = \"$max_post_id\"" let max_post_id=max_post_id-1 done exit --- Il 13/02/15, MaX ha scritto: > opss rileggento ho visto un errore: > > while [ $post_id = 0 ]; do --> while [ $max_post_id = 0 ]; do > > Il 13/02/15, MaX ha scritto: >> pensavo di fare una cosa del genere, ma si tratta di 400.000 post, e >> non si se è abbastanza veloce >> >> -- >> source config.conf >> >> post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" >> -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;") >> >> max_post_id=$(echo $post_id | sed 's|^post_id ||') >> #echo max_post_id=$max_post_id # numero da usare per il ciclo for o while >> >> while [ $post_id = 0 ]; do >> >> post_username=$(mysql --database="$MYDB" --user=$USER >> --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE >> post_id= $post_id;") >> post_username=$(echo $post_username | sed 's|^post_username ||') >> #echo post_username=$post_username >> >> post_text=$(mysql --database="$MYDB" --user=$USER >> --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE >> post_id= $post_id;") >> post_text=$(echo $post_text | sed 's|^post_text ||') >> >> new_post_text=$(echo $post_text | sed >> "s|\[quote:3pjjad9s\]$post_username,\([0-9/]*\), >> \([0-9:]*\)\]||I") >> #echo $new_post_text >> mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e >> "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = >> \"$post_id\"" >> >> let post_id=post_id-1 >> done >> >> >> ...che ne dite? >> MaX >> >> Il 13/02/15, MaX ha scritto: >>> ciao a tutti >>> >>> avrei un problema con le espessioni regolari dentro ad una query mysql >>> inglobata a sua volta in uno script :) >>> >>> chpass() { >>> mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e >>> "UPDATE phpbb_users >>> SET user_password = \"$HPPASS\" WHERE username = \"$PHPBB_USER\"" >>> } >>> >>> questo sopra è un esempio che uso per modificare via script la passwd >>> di un utente in phpbb. >>> >>> Ora peró vorrei cancellare una parte di testo dal campo " >>> phpbb_posts/post_text" ma solo se dentro a questo testo appare: >>> [quote]nome utente,20/7/2012, 19:54] e il nome utente coicide con il >>> relativo campo " phpbb_posts/post_username" >>> >>> Praticamente c' è da cancellare la linea "[quote]Alfredo,20/7/2012, >>> 19:54]" solo se nel campo "post_username" il nome coincide con >>> "Alfredo". >>> >>> A complicare le cose... la data di fianco è variabile, e il >>> "[quote]Alfredo,20/7/2012, 19:54]" >>> è sempre nella seconda linea >>> >>> Come se non bastasse, se nel messsaggio compare un >>> "[quote]Alfredo,20/7/2012, 19:54]", ma nel "post_username" il nome è >>> differente da "Alfredo", allora bisogna lasciarlo. >>> >>> ..e naturalmente il resto del messaggio deve rimanere inalterato. >>> >>> qualche idea? >>> >>> io stavo pensando di estrarre il post_id,post_text,post_text con una >>> query, fare le comparazioni con gli strumenti della shell linux, >>> togliere eventualemente il testo e poi reimmettere il testo modificato >>> usando come riferimento il post_id >>> >>> o ci sono soluzioni migliori... e più rapide... interne a mysql? >>> >>> ciao >>> MaX >>> >> >> >> -- >> ciao, >> MaX >> > > > -- > ciao, > MaX > -- ciao, MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas..
Re: query complicata con espressioni regolari
opss rileggento ho visto un errore: while [ $post_id = 0 ]; do --> while [ $max_post_id = 0 ]; do Il 13/02/15, MaX ha scritto: > pensavo di fare una cosa del genere, ma si tratta di 400.000 post, e > non si se è abbastanza veloce > > -- > source config.conf > > post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" > -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;") > > max_post_id=$(echo $post_id | sed 's|^post_id ||') > #echo max_post_id=$max_post_id # numero da usare per il ciclo for o while > > while [ $post_id = 0 ]; do > > post_username=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE > post_id= $post_id;") > post_username=$(echo $post_username | sed 's|^post_username ||') > #echo post_username=$post_username > > post_text=$(mysql --database="$MYDB" --user=$USER > --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE > post_id= $post_id;") > post_text=$(echo $post_text | sed 's|^post_text ||') > > new_post_text=$(echo $post_text | sed > "s|\[quote:3pjjad9s\]$post_username,\([0-9/]*\), > \([0-9:]*\)\]||I") > #echo $new_post_text > mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e > "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = > \"$post_id\"" > > let post_id=post_id-1 > done > > > ...che ne dite? > MaX > > Il 13/02/15, MaX ha scritto: >> ciao a tutti >> >> avrei un problema con le espessioni regolari dentro ad una query mysql >> inglobata a sua volta in uno script :) >> >> chpass() { >> mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e >> "UPDATE phpbb_users >> SET user_password = \"$HPPASS\" WHERE username = \"$PHPBB_USER\"" >> } >> >> questo sopra è un esempio che uso per modificare via script la passwd >> di un utente in phpbb. >> >> Ora peró vorrei cancellare una parte di testo dal campo " >> phpbb_posts/post_text" ma solo se dentro a questo testo appare: >> [quote]nome utente,20/7/2012, 19:54] e il nome utente coicide con il >> relativo campo " phpbb_posts/post_username" >> >> Praticamente c' è da cancellare la linea "[quote]Alfredo,20/7/2012, >> 19:54]" solo se nel campo "post_username" il nome coincide con >> "Alfredo". >> >> A complicare le cose... la data di fianco è variabile, e il >> "[quote]Alfredo,20/7/2012, 19:54]" >> è sempre nella seconda linea >> >> Come se non bastasse, se nel messsaggio compare un >> "[quote]Alfredo,20/7/2012, 19:54]", ma nel "post_username" il nome è >> differente da "Alfredo", allora bisogna lasciarlo. >> >> ..e naturalmente il resto del messaggio deve rimanere inalterato. >> >> qualche idea? >> >> io stavo pensando di estrarre il post_id,post_text,post_text con una >> query, fare le comparazioni con gli strumenti della shell linux, >> togliere eventualemente il testo e poi reimmettere il testo modificato >> usando come riferimento il post_id >> >> o ci sono soluzioni migliori... e più rapide... interne a mysql? >> >> ciao >> MaX >> > > > -- > ciao, > MaX > -- ciao, MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/CAEyAVmsZGJSjTFtVHy10s9FrMS_Kp+v=st7jgyd3o2k9gat...@mail.gmail.com
Re: query complicata con espressioni regolari
pensavo di fare una cosa del genere, ma si tratta di 400.000 post, e non si se è abbastanza veloce -- source config.conf post_id=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT MAX(post_id) AS post_id FROM phpbb_posts;") max_post_id=$(echo $post_id | sed 's|^post_id ||') #echo max_post_id=$max_post_id # numero da usare per il ciclo for o while while [ $post_id = 0 ]; do post_username=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_username FROM phpbb_posts WHERE post_id= $post_id;") post_username=$(echo $post_username | sed 's|^post_username ||') #echo post_username=$post_username post_text=$(mysql --database="$MYDB" --user=$USER --password="$PASSWD" -e "SELECT post_text FROM phpbb_posts WHERE post_id= $post_id;") post_text=$(echo $post_text | sed 's|^post_text ||') new_post_text=$(echo $post_text | sed "s|\[quote:3pjjad9s\]$post_username,\([0-9/]*\), \([0-9:]*\)\]||I") #echo $new_post_text mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e "UPDATE phpbb_posts SET post_text = \"$new_post_text\" WHERE post_id = \"$post_id\"" let post_id=post_id-1 done ...che ne dite? MaX Il 13/02/15, MaX ha scritto: > ciao a tutti > > avrei un problema con le espessioni regolari dentro ad una query mysql > inglobata a sua volta in uno script :) > > chpass() { > mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e > "UPDATE phpbb_users > SET user_password = \"$HPPASS\" WHERE username = \"$PHPBB_USER\"" > } > > questo sopra è un esempio che uso per modificare via script la passwd > di un utente in phpbb. > > Ora peró vorrei cancellare una parte di testo dal campo " > phpbb_posts/post_text" ma solo se dentro a questo testo appare: > [quote]nome utente,20/7/2012, 19:54] e il nome utente coicide con il > relativo campo " phpbb_posts/post_username" > > Praticamente c' è da cancellare la linea "[quote]Alfredo,20/7/2012, > 19:54]" solo se nel campo "post_username" il nome coincide con > "Alfredo". > > A complicare le cose... la data di fianco è variabile, e il > "[quote]Alfredo,20/7/2012, 19:54]" > è sempre nella seconda linea > > Come se non bastasse, se nel messsaggio compare un > "[quote]Alfredo,20/7/2012, 19:54]", ma nel "post_username" il nome è > differente da "Alfredo", allora bisogna lasciarlo. > > ..e naturalmente il resto del messaggio deve rimanere inalterato. > > qualche idea? > > io stavo pensando di estrarre il post_id,post_text,post_text con una > query, fare le comparazioni con gli strumenti della shell linux, > togliere eventualemente il testo e poi reimmettere il testo modificato > usando come riferimento il post_id > > o ci sono soluzioni migliori... e più rapide... interne a mysql? > > ciao > MaX > -- ciao, MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/caeyavmuo2uo+edur1czegngt6foav7pkriacndwst_kj0fm...@mail.gmail.com
query complicata con espressioni regolari
ciao a tutti avrei un problema con le espessioni regolari dentro ad una query mysql inglobata a sua volta in uno script :) chpass() { mysql --database="$MYDB" --user="$USER" --password="$PASSWD" -e "UPDATE phpbb_users SET user_password = \"$HPPASS\" WHERE username = \"$PHPBB_USER\"" } questo sopra è un esempio che uso per modificare via script la passwd di un utente in phpbb. Ora peró vorrei cancellare una parte di testo dal campo " phpbb_posts/post_text" ma solo se dentro a questo testo appare: [quote]nome utente,20/7/2012, 19:54] e il nome utente coicide con il relativo campo " phpbb_posts/post_username" Praticamente c' è da cancellare la linea "[quote]Alfredo,20/7/2012, 19:54]" solo se nel campo "post_username" il nome coincide con "Alfredo". A complicare le cose... la data di fianco è variabile, e il "[quote]Alfredo,20/7/2012, 19:54]" è sempre nella seconda linea Come se non bastasse, se nel messsaggio compare un "[quote]Alfredo,20/7/2012, 19:54]", ma nel "post_username" il nome è differente da "Alfredo", allora bisogna lasciarlo. ..e naturalmente il resto del messaggio deve rimanere inalterato. qualche idea? io stavo pensando di estrarre il post_id,post_text,post_text con una query, fare le comparazioni con gli strumenti della shell linux, togliere eventualemente il testo e poi reimmettere il testo modificato usando come riferimento il post_id o ci sono soluzioni migliori... e più rapide... interne a mysql? ciao MaX -- Per REVOCARE l'iscrizione alla lista, inviare un email a debian-italian-requ...@lists.debian.org con oggetto "unsubscribe". Per problemi inviare un email in INGLESE a listmas...@lists.debian.org To UNSUBSCRIBE, email to debian-italian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/CAEyAVms3caPOs=wF9mNnrVmf15jVgywvyvMovDhxoDweBdH=e...@mail.gmail.com