Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

#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)

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'

eval, c'est mal.

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

Watael a écrit :
awk '{if(gsub("n","n")==1) print}'

oui !
+1

on peut simplifier :

awk 'gsub("f","f")==1'

A quoi sert la simplification? smile

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...

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 smile

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

Hors ligne