Usando sed, ¿cómo se imprimen los primeros caracteres 'N' de una línea?

110

Usando sedlo que es un chiste para imprimir los primeros n caracteres ? Estoy haciendo lo siguiente:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....
Berlín marrón
fuente

Respuestas:

209

No use sed, use cut:

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

Si DEBE usar sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Paul Tomblin
fuente
2
En realidad, en un sistema Cygwin en el que estoy trabajando ahora cutno funciona, mientras que sedsí.
kqw
O incluso sed -r 's/^(.{12}).*/\1/'.
fedorqui 'SO deja de dañar'
1
@fedorqui -raparentemente está disponible en Linux, pero no en Mac.
Paul Tomblin
Exactamente, no está disponible en OSX.
fedorqui 'SO deja de dañar'
1
Para su información: cut -c 1-N(donde N es un número) hace el trabajo en mi instalación de Cygwin (Cygwin v 2.6, corte v 8.25..) En OS X, utilice sed -Een lugar de sed -r, utilizado en otros lugares.
wrlee
45
colrm x

Por ejemplo, si necesita los primeros 100 caracteres:

cat file |colrm 101 

Ha existido durante años y está en la mayoría de linux y bsd (freebsd seguro), generalmente por defecto. No recuerdo haber tenido que escribir nunca apt-get install colrm.

manoflinux
fuente
Esto no da los primeros 50n caracteres. Da los n caracteres para cada línea de texto
bsmoo
Y colrmentiende utf8.
Skippy le Grand Gourou
9

tampoco tienes que usar grep

un ejemplo:

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

Estrictamente con sed:

grep ... | sed -e 's/^\(.\{N\}\).*$/\1/'
Diego Sevilla
fuente
4

Para imprimir los N primeros caracteres, puede eliminar los N + 1 caracteres hasta el final de la línea:

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

¿Qué tal la cabeza ?

echo alonglineoftext | head -c 9
Sergey Papyan
fuente