Usando sed, como você imprime os primeiros caracteres 'N' de uma linha?

110

Usando o sedque é um liner para imprimir os primeiros n caracteres ? Estou fazendo o seguinte:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....
Berlin Brown
fonte

Respostas:

209

Não use sed, use cut:

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

Se você DEVE usar sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Paul Tomblin
fonte
2
Na verdade, em um sistema Cygwin no qual estou trabalhando agora cutnão funciona, mas sedsim.
kqw
Ou mesmo sed -r 's/^(.{12}).*/\1/'.
fedorqui 'SO pare de prejudicar'
1
@fedorqui -restá aparentemente disponível no Linux, mas não no Mac.
Paul Tomblin
Exatamente, não está disponível no OSX.
fedorqui 'SO pare de prejudicar'
1
FYI: cut -c 1-N(onde N é um número) não trabalho no meu instalação Cygwin (cygwin v 2.6, corte v 8,25..) No OS X, use sed -Eao invés de sed -r, usado em outro lugar.
wrlee
45
colrm x

Por exemplo, se você precisar dos primeiros 100 caracteres:

cat file |colrm 101 

Ele existe há anos e está na maioria dos linux e bsd's (freebsd com certeza), geralmente por padrão. Não me lembro de ter que digitar apt-get install colrm.

manoflinux
fonte
Isso não dá os primeiros 50n caracteres. Fornece os n caracteres para cada linha de texto
bsmoo
E colrmentende utf8.
Skippy le Grand Gourou
9

não tem que usar grep também

um exemplo:

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

Estritamente com sed:

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

Para imprimir os N primeiros caracteres, você pode remover os N + 1 caracteres até o final da linha:

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

Que tal cabeça ?

echo alonglineoftext | head -c 9
Sergey Papyan
fonte