[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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|<br>|\n|g' | sed
"s|\[quote\]$post_username&#44;\([0-9/]*\)&#44; \([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&#44;\([0-9/]*\)&#44;
\([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&#44;\([0-9/]*\)&#44;
\([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&#44;\([0-9/]*\)&#44;
\([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&#44;\([0-9/]*\)&#44;
\([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&#44;\([0-9/]*\)&#44;
\([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 <maxlinux2000@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&#44;\([0-9/]*\)&#44;
> \([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<maxlinux2000@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<maxlinux2000@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&#44;\([0-9/]*\)&#44;
>>> \([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<maxlinux2000@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


Reply to: