web-dev-qa-db-fra.com

Utilisation de sed / awk pour supprimer quoi que ce soit après le premier espace

aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

En utilisant sed/awk/replace, dans le texte ci-dessus, je veux supprimer tout ce qui vient après le premier espace de chaque ligne. Par exemple, la sortie sera:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

toute aide serait appréciée.

21
Rana Khan

Sed

sed 's/\s.*$//'

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Comme indiqué dans les commentaires, -o n'est pas POSIX; cependant, les deux GNU et BSD l'ont, donc cela devrait fonctionner pour la plupart des gens.

Aussi, \s/\S peut ne pas être sur tous les systèmes, si le vôtre ne le reconnaît pas, vous pouvez utiliser un espace littéral, ou si vous voulez de l'espace et des tabulations, ceux d'une expression entre crochets ([...]), ou la [[:blank:]] classe de caractères (notez qu'à proprement parler \s est équivalent à [[:space:]] et inclut des caractères d'espacement vertical ainsi que CR, LF ou VT dont vous ne vous souciez probablement pas).

Le awk suppose que les lignes ne commencent pas par un caractère vide.

36
Kevin
cut -d ' ' -f 1 < your-file

serait le plus efficace.

14
awk '{print $1}' file

ou

sed 's/ .*//'
5
jlliagre

Et celui à travers Perl,

$ Perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

Par GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
1
Avinash Raj