1 votes

modifier un fichier sql en utilisant la ligne de commande sous unix

J'ai un fichier .sql qui a besoin d'être un peu modifié, en particulier :

[xx_blah]

tout modèle tel que celui qui précède doit être remplacé par :

[Blah]

c'est-à-dire supprimer le préfixe xx et mettre en majuscules le caractère suivant.

Des conseils ?

3voto

Greg Bacon Points 50449

Simple blah remplacement :

$ sed -e 's/\[[^]]*_blah]/[Blah]/g' old.sql > new.sql

Plus général :

$ perl -pe 's/\[[^]_]+_(.+?)]/[\u$1]/g' old.sql > new.sql

La raison pour laquelle il faut faire correspondre le préfixe avec [^]_]+ plutôt que .+ est que les quantificateurs d'expressions régulières sont gourmands. Par exemple, ce dernier, lorsqu'on lui donne [xx_blah][xx_blah] de l'entreprise, qui en absorberait le plus possible et qui s'alignerait sur les xx_blah][xx Ce n'est pas ce que vous vouliez. L'exclusion du crochet droit et du trait de soulignement est une mesure de sécurité.

Les \u dans le remplacement est un séquence d'échappement qui met en majuscule la lettre suivante.

Si vous préférez sed et que vos yeux ne s'irritent pas à cause de tous les backslashes, optez pour

$ sed -e 's/\[[^]_]\+_\(.\+\?\)]/[\u\1]/g' old.sql > new.sql

1voto

Mez Points 9744
sed -e 's/xx_\([a-z]\)/\u\1/' < old.sql > new.sql

0voto

ghostdog74 Points 86060

Vous pouvez utiliser l'interpréteur de commandes sans outils externes

#!/bin/bash
declare -a arr
while read -r -a arr
do
    for((i=0;i<=${#arr};i++))                    
    do
        case "${arr[i]}" in
            *"[xx_"* );;&
            *"["*)
                arr[i]=${arr[i]//xx_/}
                arr[i]=${arr[i]^^${arr[i]:1:1}}
        esac
    done
    echo ${arr[@]}
done < "file"

exemple de résultat lors de l'exécution

PS1> more file
this is first line
this is second line
[xx_blah]
this is fourth line
blah [xx_blah] blah [xx_blah]
[someText]
end

PS1> ./mychanger.sh
this is first line
this is second line
[Blah]
this is fourth line
blah [Blah] blah [Blah]
[SomeText]
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X