En utilisant sed, comment imprimer les premiers «N» caractères d'une ligne?

110

Comment utiliser sedune seule ligne pour imprimer les n premiers caractères ? Je fais ce qui suit:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....
Brun de Berlin
la source

Réponses:

209

N'utilisez pas sed, utilisez cut:

grep .... | cut -c 1-N

Si vous DEVEZ utiliser sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Paul Tomblin
la source
2
En fait, sur un système Cygwin sur lequel je travaille maintenant, cutcela ne le coupe pas sed.
kqw
Ou même sed -r 's/^(.{12}).*/\1/'.
fedorqui 'SO arrêtez de nuire'
1
@fedorqui -rest apparemment disponible sur Linux, mais pas sur Mac.
Paul Tomblin
Exactement, il n'est pas disponible sur OSX.
fedorqui 'SO arrêtez de nuire'
1
Pour votre information: cut -c 1-N(où N est un nombre) fait le travail sur mon installation Cygwin (Cygwin v 2.6, coupe v 8.25.). Sur OS X, utilisez sed -Eplutôt que sed -r, utilisé ailleurs.
wrlee
45
colrm x

Par exemple, si vous avez besoin des 100 premiers caractères:

cat file |colrm 101 

Il existe depuis des années et se trouve dans la plupart des Linux et BSD (freebsd bien sûr), généralement par défaut. Je ne me souviens pas avoir jamais eu à taper apt-get install colrm.

manoflinux
la source
Cela ne donne pas les 50 premiers caractères. Il donne les n caractères pour chaque ligne de texte
bsmoo
Et colrmcomprend utf8.
Skippy le Grand Gourou
9

pas besoin d'utiliser grep non plus

un exemple:

sed -n '/searchwords/{s/^\(.\{12\}\).*/\1/g;p}' file
ghostdog74
la source
7

Strictement avec sed:

grep ... | sed -e 's/^\(.\{N\}\).*$/\1/'
Diego Séville
la source
4

Pour imprimer les N premiers caractères, vous pouvez supprimer les N + 1 caractères jusqu'à la fin de la ligne:

$ sed 's/.//5g' <<< "defn-test"
defn
SLePort
la source
3

Et la tête ?

echo alonglineoftext | head -c 9
Sergey Papyan
la source