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

Respostas:


209

Não use sed, use cut:

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

Se você DEVE usar sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'

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.


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.