Pages : 1
#1 Le 28/11/2017, à 17:20
- d3f4lt
Affichage de mots
Bonsoir,
Je souhaiterais afficher tout les noms de familles d'une liste contenant qu'une seul fois le caractère 'n'.
Je ne sais pas comment faire.. une aide serais la bienvenue!
Merci d'avance..
Hors ligne
#2 Le 28/11/2017, à 17:42
- pingouinux
Re : Affichage de mots
Bonsoir,
Si c'est un fichier texte :
awk '{if(gsub("n","n")==1) print}' fichier
Hors ligne
#3 Le 28/11/2017, à 17:50
- d3f4lt
Re : Affichage de mots
Merci énormément.. j'étais vraiment bloqué car je pensais qu'il y avait une manière plus simple de le faire..
Encore merci!
Hors ligne
#4 Le 28/11/2017, à 21:52
- Hizoka
Re : Affichage de mots
Bonsoir, moi je propose un truc différent :
while read ligne
do
nombre="${ligne//[^n]}"
[[ ${#nombre} -eq 1 ]] && echo "${ligne}"
done <<< "fefefenfefzf
zfzenfezzf
azerty
feeneeenee"
C'est dingue que la question apparaisse à 2 endroits différents avec quelques heures de décalage (sur developpez.net)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 28/11/2017, à 22:29
- Watael
Re : Affichage de mots
awk '{if(gsub("n","n")==1) print}'
oui !
+1
on peut simplifier :
awk 'gsub("f","f")==1'
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 29/11/2017, à 07:21
- pingouinux
Re : Affichage de mots
Bien vu, Watael !
Hors ligne
#7 Le 29/11/2017, à 16:48
- d3f4lt
Re : Affichage de mots
awk '{if(gsub("n","n")==1) print}'
oui !
+1on peut simplifier :
awk 'gsub("f","f")==1'
A quoi sert la simplification?
Hors ligne
#8 Le 29/11/2017, à 22:08
- DonutMan75
Re : Affichage de mots
Hello,
je ne suis pas connecté sur mon Ubuntu préféré (j'ai un dual boot win7....) donc je ne peux pas tester mais pourquoi pas la solution suivante ?
$grep -E "[^n].*n[^n].*"
Mais je ne me souviens plus si [^n].* signifie "n'importe quel caractère sauf n, répété un nombre quelconque de fois" dans le sens de a, aa, aaaa (à chaque fois c'est le même caractère) ou alors si le caractère peut changer à chaque fois... (exemple : abcd....)
Bon à mon avis, ma solution ne doit pas marcher... Rhaaa c'est rageant ces Windows sans terminal digne de ce nom !!
Donut.
Hors ligne
#9 Le 29/11/2017, à 23:50
- Hizoka
Re : Affichage de mots
La bonne facon est :
grep -E "^[^n]*n[^n]*$"
^n veut dire tout sauf n
mais [^n].* veut : un caractère sauf n puis n'importe quoi...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 30/11/2017, à 16:38
- DonutMan75
Re : Affichage de mots
Hello Hizoka,
oui tout à fait il faut virer les deux '.', j'ai écrit trop vite.
Et, effectivement, ça ne marche pas avec la commande suivante (qui renvoie d'après mes tests toutes les lignes contenant au moins un 'n')
grep -E '[^n]*n[^n]*'
mais il faut plutôt :
grep -E '^[^n]*n[^n]*$'
Pourquoi cet effet de bord des métacaractères '^' et '$' ?
EDIT : mais oui, bien sûr... j'ai pas les yeux en face des trous moi....
grep -E '[^n]*n[^n]*'
>> Ca ca va matcher la plus longue expression contenant exactement un 'n'
donc le "nobstant" de nonobstant par exemple... Du coup le grep réussit !
En revanche, si on veut vraiment tester l'intégralité de la chaîne, il faut bien spécifier qu'on l'étudie en entier avec ^ et $.
Et la, "nonobstant" ça passe plus...
Bonne journée à tous
Donut
Dernière modification par DonutMan75 (Le 30/11/2017, à 17:08)
Hors ligne
#11 Le 30/11/2017, à 20:07
- Hizoka
Re : Affichage de mots
J'ai fait exactement la même erreur dans mes tests, d'où ma proposition XD
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
Pages : 1