J'ai un fichier contenant plusieurs lignes et je souhaite afficher uniquement le premier mot de chaque ligne avec les commandes Linux.
Comment puis je faire ça?
Essayez de faire cela avec grep :
grep -Eo '^[^ ]+' file
Vous pouvez utiliser awk
:
awk '{print $1}' your_file
Ceci "imprimera" la première colonne ($1
) dans your_file
.
essayez de faire ceci avec coreutils cut
:
cut -d' ' -f1 file
Je vois qu'il y a déjà des réponses. Mais vous pouvez aussi le faire avec sed:
sed 's/ .*//' fileName
Les solutions ci-dessus semblent correspondre à votre cas particulier. Pour une application plus générale de votre question, considérez que les mots sont généralement définis comme étant séparés par des espaces, mais pas nécessairement par des espaces. Les colonnes de votre fichier peuvent par exemple être séparées par des tabulations, voire séparées par un mélange d'onglets et d'espaces.
Les exemples précédents sont tous utiles pour trouver des mots séparés par des espaces, tandis que seul l'exemple awk trouve également des mots séparés par d'autres caractères d'espacement (et en fait, cela s'avère assez difficile à faire de manière uniforme dans diverses versions de sed/grep). Vous pouvez également vouloir explicitement ignorer les lignes vides, en modifiant l'instruction awk comme suit:
awk '{if ($1 !="") print $1}' your_file
Si vous êtes également préoccupé par la possibilité de champs vides, c'est-à-dire des lignes qui début _ avec des espaces, une solution plus robuste serait alors appropriée. Je ne suis pas assez habitué avec awk pour produire un one-liner dans de tels cas, mais un court script python qui fait le tour pourrait ressembler à ceci:
>>> import re
>>> for line in open('your_file'):
... words = re.split(r'\s', line)
... if words and words[0]:
... print words[0]
... ou sous Windows (si vous avez grep GnuWin32):
grep -Eo "^[^ ]+" file