Exercice shell script (supprimer lignes)
Fermé
momsse
-
9 mai 2007 à 12:41
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 mars 2009 à 19:20
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 18 mars 2009 à 19:20
A voir également:
- Exercice shell script (supprimer lignes)
- Script vidéo youtube - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer pub youtube - Accueil - Streaming
- Classic shell windows 11 - Télécharger - Personnalisation
6 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 898
10 mai 2007 à 00:28
10 mai 2007 à 00:28
Salut,
Le seul problème qui persiste est au niveau d'un paramètre matchant une ligne n'existant pas (en dehors des lignes de départ existantes) et qui génére donc une erreur 6 (dernier cas du "case ... esac"). Donc à régler...
Le seul problème qui persiste est au niveau d'un paramètre matchant une ligne n'existant pas (en dehors des lignes de départ existantes) et qui génére donc une erreur 6 (dernier cas du "case ... esac"). Donc à régler...
#! /bin/bash # enlever-des-lignes.sh # Déclaration fonction d'usage fonction_usage () { echo -e "\tUsage : $0 [n|n-n]\n" echo -e "\tn est un entier positif." echo -e "\tn-n est un intervalle (eg. 6-15)" echo -e "\tLes entiers seront séparés par un espace.\n\ Les intervalles n-n séparés par un tiret \"-\".\n" } # Test existence fichier if [ ! -e "$1" ]; then echo -e "Le fichier $1 n'existe pas ! \n" fonction_usage exit 2 fi # Test nombre de paramètres if [ "$#" -lt 2 ]; then echo -e "Nombre de paramètres incorrects ! \n\n" fonction_usage exit 3 fi # Test entier positif et/ou mauvais intervalle for n in "$@"; do case "$n" in -* ) echo -e "Les entiers doivent être de type positif !\n" fonction_usage exit 4 ;; *-* ) var1=$(echo $n | cut -d- -f1) var2=$(echo $n | cut -d- -f2) if [ "$var1" -gt "$var2" ]; then echo -e "Erreur dans l'intervalle \"$n\"\n" fonction_usage exit 5 fi ;; [0-9]*[!-][0-9]* ) echo -e "Le caractère séparateur d'intervalle n'est pas un tiret !\n" fonction_usage exit 6 ;; esac done ##### Début du script ##### # Initialisation variable fichier (pour libérer le paramètres $1) fichier=$1 # Décalage des paramètres shift # Initialisation des paramètres en passant par : #+ substitution espace par saut de ligne #++ tri numérique #+++ substitution saut de ligne par espace et #++++ substitution tiret par virgule set $(echo "$@" | sed 's/ /\n/g'| sort -n | sed -e :a -e '$!N;s/\n/ /;ta' -e 's/-/,/g') # Initialisatieon compteur n=1 # Initialisation variable "cmd" (sed) cmd="sed " # Boucle tant que compteur inférieur au nombre de paramètres while [ "$n" -le "$#" ] do # On rajoute à la variable "cmd" le reste de la commande sed cmd="$cmd-e ''\$$n'd' " # On incrémente le compteur n=$(expr $n + 1) done # On exécute la commande (cmd) qui doit ressembler pour 4 paramètres initiaux à : #+ sed -e ''$1'd ' -e ''$2'd ' -e ''$3'd ' $fichier eval $cmd $fichier;-))
Votre script devra également prendre en compte des intervalles de lignes via la notation numéro-début-ligne
L'ennoncé entier est ici :
http://momsse.free.fr/exo.rtf
Je ne sais pas pourquoi ca me tronque la moitié ...
http://momsse.free.fr/exo.rtf
Je ne sais pas pourquoi ca me tronque la moitié ...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
9 mai 2007 à 14:32
9 mai 2007 à 14:32
Utilise la commande sed : sed '1,10d' efface les 10 premières lignes, à partir de là. A toi de changer l'argument de sed pour l'adapter à tes besoins
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut !
J'ai pas compris :
if [ ! -e "$1" ]
dans le test d'existence du fichier.
que veut dire le " -e"?
Je veux également savoir quand est-ce qu'on utilise l'eval
10x
J'ai pas compris :
if [ ! -e "$1" ]
dans le test d'existence du fichier.
que veut dire le " -e"?
Je veux également savoir quand est-ce qu'on utilise l'eval
10x
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
18 mars 2009 à 19:13
18 mars 2009 à 19:13
je dirai que -e signifie "equal" ?
à confirmer
oups désolé pour le deterrage...
à confirmer
oups désolé pour le deterrage...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
18 mars 2009 à 19:15
18 mars 2009 à 19:15
Perdu ;-))
-e = existe
;-))
-e = existe
;-))
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
18 mars 2009 à 19:18
18 mars 2009 à 19:18
Trop rapide pour moi :d.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
18 mars 2009 à 19:20
18 mars 2009 à 19:20
T'en fais pô, ça va viendre ;-))
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 mars 2009 à 19:17
18 mars 2009 à 19:17
Salut,
Non, -e permet de savoir si le fichier existe.
Cdlt
Non, -e permet de savoir si le fichier existe.
Cdlt
9 oct. 2008 à 13:54
Comme j'ai pas trouvé de merci dans ce thread... Je trouvai normal de le dire!
Donc MERCI pour ce script, même s'il ne me servait pas directement... et même si je remonte un vieux post!
PS : J'avais juste oublier la différence entre $* $# et $@, et j'ai trouvé.
10 oct. 2008 à 17:16
10 oct. 2008 à 18:34
Merchi à vous ;-))
</ModeRougeCommeUnCoquelicot>