Bash - Traitement d'un fichier
Résolu
Remad
Messages postés
1694
Statut
Membre
-
Remad Messages postés 1694 Statut Membre -
Remad Messages postés 1694 Statut Membre -
Bonjour à tous!
Voila, je cherche comment remplacer une ligne par un @, puis après supprimer toutes les lignes du fichier qui commencent par un @. En gros, voici le code:
Merci d'avance!
Voila, je cherche comment remplacer une ligne par un @, puis après supprimer toutes les lignes du fichier qui commencent par un @. En gros, voici le code:
chmod -R 700 $HOME/backup #restore the write permission on the folder
for ARG in "$@" #for every parameters
do
line=$(awk "NR==$ARG" $HOME/backup/.backup)
input=${line%»*} #delete the "»" at the end
input=${input#* -> «} #delete the beginning until " -> «"
output=${line%» -> *} #delete from "» -> *"
output=${output#*«} #delete the "«" at the beginning
mv -iv $input $output >> /dev/null #restore the file, no text messages
#TODO comment remplacer la ligne par un @?
done
#TODO comment supprimer toutes les lignes qui commencent par un @?
chmod -R 500 $HOME/backup #restore the limited permissions
Merci d'avance!
3 réponses
-
Salut,
je cherche comment remplacer une ligne par un @, puis après supprimer toutes les lignes du fichier qui commencent par un @
Euh... pourquoi ne pas supprimer la ligne directement ??? ;-\
-
Salut,
Pourquoi pas continue avec bash?
#TODO comment remplacer la ligne par un @?
line=${line//*/@}
Si la suppression ne marche pas avec sed alors essaie avec perl$ cat plop dsfsdf @dsfdsjfdlsdfj dsfjdjsfldsf @sdfdsfds dsfdsf $ perl -pi.orig -e 's/^@.*\n//' plop $ cat plop dsfsdf dsfjdjsfldsf dsfdsf $ cat plop.orig dsfsdf @dsfdsjfdlsdfj dsfjdjsfldsf @sdfdsfds dsfdsf
-
J'ai trouvé la réponse!
chmod -R 700 $HOME/backup #restore the write permission on the folder for ARG in "$@" #for every parameters do line=$(awk "NR==$ARG" $HOME/backup/.backup) input=${line%»*} #delete the "»" at the end input=${input#* -> «} #delete the beginning until " -> «" output=${line%» -> *} #delete from "» -> *" output=${output#*«} #delete the "«" at the beginning mv -iv $input $output >> /dev/null #restore the file, no text messages sed -i "s|$line|@|" $HOME/backup/.backupfile #replacing the line with "@" done sed -i '/^@/d' $HOME/backup/.backupfile #deleting all the "@" lines chmod -R 500 $HOME/backup #restore the limited permissions
Maintenant, il faut juste que je vérifie que le(s) paramètres est(sont) valide(s). J'avais pensé à sa:
chmod -R 700 $HOME/backup #restore the write permission on the folder nbline=$(wc -l $HOME/backup/.backupfile) #check how many lines there is on the .backupfile file nbline=${nbline% *} #take only the number echo "nbline = $nbline" for ARG in "$@" #for every parameters do if [[ "$ARG" == [0-"$nbligne"] ]] # if the parameter is correct then line=$(awk "NR==$ARG" $HOME/backup/.backupfile) input=${line%»*} #delete the "»" at the end ...
Mais sa ne fonctionne pas... Une idée?-
-
-
-
Voila le code en entier : http://ww25.codeviewer.org/view/code:2091
-
Ok. Alors le plus simple c'est encore de comparer la valeur de ton paramètre (est inférieur ou égal) par rapport au nombre maximal de lignes dans ton fichier, comme ça :
$ cat foo.sh #! /bin/bash count=10 for arg in "$@" do if [[ $arg -le $count ]] then echo "Argument $arg correct." else echo "Argument $arg incorrect." fi done $ ./foo.sh 2 9 11 5 3 15 Argument 2 correct. Argument 9 correct. Argument 11 incorrect. Argument 5 correct. Argument 3 correct. Argument 15 incorrect. $
;-))
-