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 -- 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/caeyavmvfrdkd5o0eakx8+kwnrordxi9y4woqxoy1hhoslv-...@mail.gmail.com