Suppression ligne shell unix
Résolu/Fermé
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
-
4 mai 2009 à 15:34
sacan76 Messages postés 6 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 5 mai 2009 - 5 mai 2009 à 17:57
sacan76 Messages postés 6 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 5 mai 2009 - 5 mai 2009 à 17:57
Bonjour,
Voilà je n'ai pas pratiqué le shell depuis l'école d'ingé et je suis un peu perdu.
J'ai un répertoire contenant 30 fichiers texte de req01.txt à req30.txt. Le but est de supprimer la 3ème ligne de chaque fichier.
J'utilise cette commande sed '3d' req01.txt > req01_def.txt
Y-a-t'il une moyen de gérer l'ensemble des 30 fichiers sas passer par un fichier *_def.txt.
Merci de votre aide.
Voilà je n'ai pas pratiqué le shell depuis l'école d'ingé et je suis un peu perdu.
J'ai un répertoire contenant 30 fichiers texte de req01.txt à req30.txt. Le but est de supprimer la 3ème ligne de chaque fichier.
J'utilise cette commande sed '3d' req01.txt > req01_def.txt
Y-a-t'il une moyen de gérer l'ensemble des 30 fichiers sas passer par un fichier *_def.txt.
Merci de votre aide.
A voir également:
- Suppression ligne shell unix
- Forcer suppression fichier - Guide
- Partager photos en ligne - Guide
- Aller à la ligne excel - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Site de vente en ligne particulier - Guide
5 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 mai 2009 à 15:45
4 mai 2009 à 15:45
Salut,
PS. Le ".bak" est facultatif, il crée juste une copie de chaque fichier modifié au cas ou...
sed -i.bak '3d' req*.txtdevrait le faire ;-))
PS. Le ".bak" est facultatif, il crée juste une copie de chaque fichier modifié au cas ou...
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
4 mai 2009 à 16:02
4 mai 2009 à 16:02
Merci pour ta réponse rapide.
Mais quand je tape la commande il me met "sed: illegal option -- i", je n'ai peux être pas la même version de shell que toi.
Mais quand je tape la commande il me met "sed: illegal option -- i", je n'ai peux être pas la même version de shell que toi.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 mai 2009 à 16:06
4 mai 2009 à 16:06
C'est ta version de sed qui doit être inférieure à la v4.0.5 (qui introduit l'option "-i" (modification en place)).
Il faudrait voir avec "ed" à ce moment là...
Je jette un oeil et je reviens ;-))
Il faudrait voir avec "ed" à ce moment là...
Je jette un oeil et je reviens ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
4 mai 2009 à 16:20
4 mai 2009 à 16:20
Tiens ça devrait faire l'affaire :
Edit : Rajout de "&>/dev/null"
#! /bin/bash #set -xv for fich in req*.txt do ed $fich <<EOF 3d w . EOF done &>/dev/null;-))
Edit : Rajout de "&>/dev/null"
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
4 mai 2009 à 17:31
4 mai 2009 à 17:31
Merci... C'est parfais.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
4 mai 2009 à 17:34
4 mai 2009 à 17:34
De rien ;-))
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
5 mai 2009 à 15:36
5 mai 2009 à 15:36
Bonjour,
Je viens de faire plusieurs test et je ne sais pas pk mais seulement une partie des fichier req*.txt sont pris en compte.
Et je dois de plus supprimer la 1ère ligne maintenant.
Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.
Merci de votre aide
Je viens de faire plusieurs test et je ne sais pas pk mais seulement une partie des fichier req*.txt sont pris en compte.
Et je dois de plus supprimer la 1ère ligne maintenant.
Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.
Merci de votre aide
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
5 mai 2009 à 15:40
5 mai 2009 à 15:40
mais seulement une partie des fichier req*.txt sont pris en compte.
Ils sont tous de la même forme ces fichiers "req*.txt" ?
Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.
Sans l'option "-i" non ;-((
Ils sont tous de la même forme ces fichiers "req*.txt" ?
Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.
Sans l'option "-i" non ;-((
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
5 mai 2009 à 15:58
5 mai 2009 à 15:58
C'est juste au niveau de la longeur des fichiers que ca change, mais c'est vrai quand il n'ont pas la longeur pas "défaut" (100 carractère) ce ne marche pas.
Sinon j'ai pensé à cette solution :
for i in req*.txt
do
sed -e '1d' req*.txt > req.tmp
sed -e '2d' req.tmp > req*.txt
done
&>/dev/null
le problème s'est que je ne sais pas comment le faire boucler pour prendre le req01.txt, req02.txt etc...
Sinon j'ai pensé à cette solution :
for i in req*.txt
do
sed -e '1d' req*.txt > req.tmp
sed -e '2d' req.tmp > req*.txt
done
&>/dev/null
le problème s'est que je ne sais pas comment le faire boucler pour prendre le req01.txt, req02.txt etc...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
5 mai 2009 à 17:40
5 mai 2009 à 17:40
for i in req*.txt do sed -e '1d' "${i}" > req.tmp sed -e '2d' req.tmp > "${i}" done &>/dev/null
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sacan76
Messages postés
6
Date d'inscription
lundi 4 mai 2009
Statut
Membre
Dernière intervention
5 mai 2009
5 mai 2009 à 17:57
5 mai 2009 à 17:57
merci pour ta réponse...
il me manquait le "${i}". J''étais entrein de lire des cours sur le shell...
Je vais continuer pour la forme.
Encore merci.
il me manquait le "${i}". J''étais entrein de lire des cours sur le shell...
Je vais continuer pour la forme.
Encore merci.