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|<br>|\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:]*\),<br><br>\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|I" | sed 's|<br>|\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:]*\),<br><br>\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|AA#AA|" | sed 's|<br>|\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:]*\)\]<br>||I" | sed 's|\"|\\"|g') new_post_text=$(echo $new_post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),<br><br>\[quote\]$post_username,\([0-9/]*\), \([0-9:]*\)\]<br>|Data Originale: \1 \2<br><br>|I" | sed 's|\"|\\"|g' ) new_post_text=$(echo $new_post_text | sed "s|Data originale: \([0-9-]*\) \([0-9:]*\),<br><br>\[quote:\([a-zA-Z0-9]*\)\]$post_username,\([0-9/]*\), \([0-9:]*\)\]|Data Originale: \1 \2<br>|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 <maxlinux2...@gmail.com>: > mmmm 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=100000 > > 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:]*\)\]<br>||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<maxlinux2...@gmail.com> ha scritto: >> opss rileggento ho visto un errore: >> >> while [ $post_id = 0 ]; do --> while [ $max_post_id = 0 ]; do >> >> Il 13/02/15, MaX<maxlinux2...@gmail.com> 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:]*\)\]<br>||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<maxlinux2...@gmail.com> 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 > -- 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/CAEyAVmth-A�zv+o9x0ebdzzrqv0ekuohx4s6rwsdfeyta...@mail.gmail.com