[Tester une ligne vide en shellscript]
Fermé
Ghis
-
25 janv. 2006 à 10:09
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 janv. 2006 à 12:01
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 janv. 2006 à 12:01
Bonjour à tous,
Comment pourrais-je tester si une ligne d'un fichier est vide?
Par exemple tester la ligne 11 est faire un traitement si celle-ci est vide?
Merci par avance.
Comment pourrais-je tester si une ligne d'un fichier est vide?
Par exemple tester la ligne 11 est faire un traitement si celle-ci est vide?
Merci par avance.
A voir également:
- [Tester une ligne vide en shellscript]
- Flash drive tester - Télécharger - Divers Utilitaires
- Partager photos en ligne - Guide
- Tester son pc - Guide
- Comment supprimer une page vide sur word - Guide
- Mètre en ligne - Guide
10 réponses
tu peux faire un truc simple comme :
cat -n = afficher les lignes avec les numero
grep ^11 = trier et afficher que la ligne commençant par 11 (11eme)
cut = virer le n° avant de compter les lettres de la ligne
wc -c = compter les caracteres
-eq 0 = tester l'egalité avec zéro.
if [ `cat -n fichier | grep ^11 | cut -d" " -f2 | wc -c` -eq 0 ]; then ..... else ..... fi
cat -n = afficher les lignes avec les numero
grep ^11 = trier et afficher que la ligne commençant par 11 (11eme)
cut = virer le n° avant de compter les lettres de la ligne
wc -c = compter les caracteres
-eq 0 = tester l'egalité avec zéro.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
25 janv. 2006 à 19:42
25 janv. 2006 à 19:42
Salut,
head -11 fichier | tail -1
Me semble plus sûr pour afficher la ligne 11. Celà évite de rencontrer 11, 110, 111, ... et celà évite d'avoir à gérer les différences de format de "cat -n" qui peuvent, selon les implémentations, ne pas afficher les numéros de lignes de la même manière (par exemple sur FreeBSD il me met 4 espaces en début de ligne avant le numéro et une tabulation après).
Dal
head -11 fichier | tail -1
Me semble plus sûr pour afficher la ligne 11. Celà évite de rencontrer 11, 110, 111, ... et celà évite d'avoir à gérer les différences de format de "cat -n" qui peuvent, selon les implémentations, ne pas afficher les numéros de lignes de la même manière (par exemple sur FreeBSD il me met 4 espaces en début de ligne avant le numéro et une tabulation après).
Dal
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
25 janv. 2006 à 20:21
25 janv. 2006 à 20:21
Salut,
Tu peux aussi passer par le filtre "sed" :
Tu peux aussi passer par le filtre "sed" :
sed -n 11p le_fichier;-))
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
26 janv. 2006 à 10:14
26 janv. 2006 à 10:14
Merci Jipicy, c'est d'une telle simplicité !
C'est vraiment étonnant tout ce qu'on peut faire avec sed.
Dal
C'est vraiment étonnant tout ce qu'on peut faire avec sed.
Dal
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
26 janv. 2006 à 10:26
26 janv. 2006 à 10:26
De rien ;-))
C'est vraiment étonnant tout ce qu'on peut faire avec sed.
Ouais, et c'est ça qui me désole... j'ai l'impression qu'une vie ne suffira pas à en faire le tour, et je parle même pas de "awk" et consort :-((
;-DDDDDD
Ma bible en la matière pour ce qui est du shell (sed compris) :
http://tinyurl.com/axwb6
et récemment : http://www.blaess.fr/christophe/publications/scriptlinux/index.html
C'est vraiment étonnant tout ce qu'on peut faire avec sed.
Ouais, et c'est ça qui me désole... j'ai l'impression qu'une vie ne suffira pas à en faire le tour, et je parle même pas de "awk" et consort :-((
;-DDDDDD
Ma bible en la matière pour ce qui est du shell (sed compris) :
http://tinyurl.com/axwb6
et récemment : http://www.blaess.fr/christophe/publications/scriptlinux/index.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
pour la commande sed -n 11p le_fichier
Puis-je faire un test du type:
if ( sed -n 11p le_fichier ) then
$V="OK"
else
$V="NOK"
endif
car j'ai une erreur de syntaxe?
Merci.
pour la commande sed -n 11p le_fichier
Puis-je faire un test du type:
if ( sed -n 11p le_fichier ) then
$V="OK"
else
$V="NOK"
endif
car j'ai une erreur de syntaxe?
Merci.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
27 janv. 2006 à 14:55
27 janv. 2006 à 14:55
Pour bash, voilà comment faire des structures de test :
http://www.tldp.org/LDP/abs/html/testconstructs.html
et pour assigner des variables, comme çà :
http://www.tldp.org/LDP/abs/html/varassignment.html
Dal
http://www.tldp.org/LDP/abs/html/testconstructs.html
et pour assigner des variables, comme çà :
http://www.tldp.org/LDP/abs/html/varassignment.html
Dal
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
27 janv. 2006 à 18:46
27 janv. 2006 à 18:46
Salut,
La commande "sed -n 11p le_fichier" ne fait que retourner (afficher) la ligne "11" (une ligne vide si elle est vide, une chaine de caractères si elle n'est pas vide).
Il faut donc évaluer ladite ligne comme le suggérait "caec" dans le post "1, mais on va plutôt compter les mots (s'il y en a) avec l'option "-w" de la commande "wc" (word count) et ensuite comparer ce résultat, autrement dit voir s'il est égal à "0" ou non...
La commande "sed -n 11p le_fichier" ne fait que retourner (afficher) la ligne "11" (une ligne vide si elle est vide, une chaine de caractères si elle n'est pas vide).
Il faut donc évaluer ladite ligne comme le suggérait "caec" dans le post "1, mais on va plutôt compter les mots (s'il y en a) avec l'option "-w" de la commande "wc" (word count) et ensuite comparer ce résultat, autrement dit voir s'il est égal à "0" ou non...
[jp@Mandrake tmpfs]$ cat fichier.txt cat -n = afficher les lignes avec les numero grep ^11 = trier et afficher que la ligne commençant par 11 (11eme) cut = virer le n° avant de compter les lettres de la ligne wc -c = compter les caracteres -eq 0 = tester l'egalité avec zéro. [jp@Mandrake tmpfs]$ if [ `sed -n 5p fichier.txt | wc -w` -eq 0 ];then echo "C'est good"; else echo "C'est pas good";fi C'est good [jp@Mandrake tmpfs]$ if [ `sed -n 6p fichier.txt | wc -w` -eq 0 ];then echo "C'est good"; else echo "C'est pas good";fi C'est pas good [jp@Mandrake tmpfs]$Voilà, à adapter à ton cas.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
31 janv. 2006 à 12:01
31 janv. 2006 à 12:01
Ben tu testes déjà pour savoir si ton fichier contient ou pas de lignes vides :
grep '^$' fichier.txtPuis tu traites en fonction ;-)