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

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

Rana Khan
la source

Réponses:

35

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

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

En outre, \s/ \Sne peut pas être sur tous les systèmes, si le vôtre ne reconnaît pas que vous pouvez utiliser un espace littéral, ou si vous voulez l' espace et onglet, ceux dans une expression de support ( [...]), ou la [[:blank:]]classe de caractères (notez que à proprement parler \sest é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 un suppose que les lignes ne commencent pas par un caractère vide.

Kevin
la source
14
cut -d ' ' -f 1 < your-file

serait le plus efficace.

Stéphane Chazelas
la source
4
J'ai remarqué cela dans plusieurs de vos réponses et je me demandais s'il y avait une raison à cela: vous semblez toujours ajouter une redirection d'entrée même lorsque la commande peut fonctionner sans elle. Pouvez-vous expliquer pourquoi l' <utilité ici?
Joseph R.
5
@JosephR. Tu veux dire cut < filevs cut file? Voir ensuite unix.stackexchange.com/a/70759/22565
Stéphane Chazelas
couper peut être la meilleure solution pour des problèmes aussi simples. Je réserverais awk (ou perl) pour une correspondance plus complexe.
ChuckCottrill
@StephaneChazelas Merci pour la perspicacité (caractéristique) :)
Joseph R.
5
awk '{print $1}' file

ou

sed 's/ .*//'
jlliagre
la source
1

Et l'un à travers perl,

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

Grâce à GNU grep,

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