Bash - Traitement d'un fichier
Résolu/Fermé
Remad
Messages postés
1662
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2012
-
Modifié par Remad le 20/11/2011 à 18:50
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 - 27 nov. 2011 à 23:09
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 - 27 nov. 2011 à 23:09
A voir également:
- Bash - Traitement d'un fichier
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
20 nov. 2011 à 20:46
20 nov. 2011 à 20:46
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 ??? ;-\
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 ??? ;-\
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
20 nov. 2011 à 21:46
20 nov. 2011 à 21:46
Salut,
Pourquoi pas continue avec bash?
#TODO comment remplacer la ligne par un @?
Si la suppression ne marche pas avec sed alors essaie avec perl
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
Remad
Messages postés
1662
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2012
697
20 nov. 2011 à 21:53
20 nov. 2011 à 21:53
#TODO comment remplacer la ligne par un @?
line=${line//*/@}
Je parlais de la ligne qui est dans le fichier $HOME/backup/.backup, pas de la variable $line.
Le programme est pour un DM. Je dois utiliser du bash.
line=${line//*/@}
Je parlais de la ligne qui est dans le fichier $HOME/backup/.backup, pas de la variable $line.
Le programme est pour un DM. Je dois utiliser du bash.
Remad
Messages postés
1662
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2012
697
Modifié par Remad le 23/11/2011 à 02:13
Modifié par Remad le 23/11/2011 à 02:13
J'ai trouvé la réponse!
Maintenant, il faut juste que je vérifie que le(s) paramètres est(sont) valide(s). J'avais pensé à sa:
Mais sa ne fonctionne pas... Une idée?
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?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
23 nov. 2011 à 09:35
23 nov. 2011 à 09:35
for ARG in "$@" #for every parameters
D'où ils sortent tes paramètres ?
Ils ressemblent à quoi ?
Là tu nous donnes un bout de ton script, mais on n'a pas les tenants et les aboutissants, difficile de t'aider sans savoir de quoi il en retourne ;-\
D'où ils sortent tes paramètres ?
Ils ressemblent à quoi ?
Là tu nous donnes un bout de ton script, mais on n'a pas les tenants et les aboutissants, difficile de t'aider sans savoir de quoi il en retourne ;-\
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
23 nov. 2011 à 10:40
23 nov. 2011 à 10:40
En attendant histoire de faire avancer le schmilblick ;-))
Plutôt que :
Il est plus simple de faire avec une redirection en entrée (<) :
Plutôt que :
nbline=$(wc -l $HOME/backup/.backupfile) nbline=${nbline% *} #take only the number
Il est plus simple de faire avec une redirection en entrée (<) :
nbline=$(wc -l < $HOME/backup/.backupfile)
Remad
Messages postés
1662
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2012
697
23 nov. 2011 à 14:03
23 nov. 2011 à 14:03
Les paramètres sont des nombres qui doivent être compris entre 0 et nbline. Ils ont passés en paramètres quand tu lace le fichier bash, pour savoir quel ligne il du fichier .backupfile tu dois traiter.
Remad
Messages postés
1662
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
27 juillet 2012
697
23 nov. 2011 à 14:09
23 nov. 2011 à 14:09
Voila le code en entier : http://ww25.codeviewer.org/view/code:2091
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
23 nov. 2011 à 14:14
23 nov. 2011 à 14:14
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. $
;-))
20 nov. 2011 à 20:51
20 nov. 2011 à 20:56
Donc pour remplacer :
Pour supprimer :
20 nov. 2011 à 21:14