Jak za pomocą seda wypisuje się pierwsze „N” znaków wiersza?

110

Używając sedjednej linijki do wydrukowania pierwszych n znaków ? Wykonuję następujące czynności:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....
Berlin Brown
źródło

Odpowiedzi:

209

Nie używaj sed, użyj cut:

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

Jeśli MUSISZ użyć sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Paul Tomblin
źródło
2
Właściwie w systemie Cygwin, nad którym teraz pracuję cut, nie działa, podczas gdy sedtak.
kqw
Albo nawet sed -r 's/^(.{12}).*/\1/'.
fedorqui 'SO przestań szkodzić'
1
@fedorqui -rjest najwyraźniej dostępny w systemie Linux, ale nie na Macu.
Paul Tomblin,
Dokładnie, nie jest dostępny na OSX.
fedorqui 'SO przestać krzywdzić'
1
FYI: cut -c 1-N(gdzie N jest liczbą) wykonuje pracę na mojej instalacji Cygwin (Cygwin v 2.6, cięcie v 8.25.). Na OS X, użyj sed -Ezamiast sed -rstosowane gdzie indziej.
wrlee
45
colrm x

Na przykład, jeśli potrzebujesz pierwszych 100 znaków:

cat file |colrm 101 

Istnieje od lat i jest w większości systemów Linux i bsd (na pewno freebsd), zwykle domyślnie. Nie pamiętam, żebym kiedykolwiek musiał pisać apt-get install colrm.

manoflinux
źródło
To nie daje pierwszych 50n znaków. Daje n znaków w każdym wierszu tekstu
bsmoo
I colrmrozumie utf8.
Skippy le Grand Gourou
9

nie musisz też używać grep

przykład:

sed -n '/searchwords/{s/^\(.\{12\}\).*/\1/g;p}' file
ghostdog74
źródło
7

Ściśle z sed:

grep ... | sed -e 's/^\(.\{N\}\).*$/\1/'
Diego Sevilla
źródło
4

Aby wydrukować N pierwszych znaków, możesz usunąć N + 1 znaków aż do końca linii:

$ sed 's/.//5g' <<< "defn-test"
defn
SLePort
źródło
3

A co z głową ?

echo alonglineoftext | head -c 9
Sergey Papyan
źródło