Dengan menggunakan sed, bagaimana Anda mencetak karakter 'N' pertama dari sebuah baris?

110

Menggunakan sedapa satu liner untuk mencetak n karakter pertama ? Saya melakukan hal berikut:

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

Jawaban:

209

Jangan gunakan sed, gunakan cut:

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

Jika Anda HARUS menggunakan sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Paul Tomblin
sumber
2
Sebenarnya pada sistem Cygwin yang saya kerjakan sekarang cuttidak menghentikannya sementara seditu.
kqw
Atau bahkan sed -r 's/^(.{12}).*/\1/'.
fedorqui 'JADI berhenti merusak'
1
@fedorqui -rtampaknya tersedia di Linux, tetapi tidak di Mac.
Paul Tomblin
Tepatnya, itu tidak tersedia di OSX.
fedorqui 'SO berhenti melukai'
1
FYI: cut -c 1-N(di mana N adalah angka) tidak bekerja pada instalasi Cygwin saya (cygwin 2,6 v, dipotong v 8,25..) Pada OS X, gunakan sed -Ebukan sed -r, digunakan di tempat lain.
wrlee
45
colrm x

Misalnya, jika Anda membutuhkan 100 karakter pertama:

cat file |colrm 101 

Sudah ada selama bertahun-tahun dan di sebagian besar linux dan bsd (freebsd pasti), biasanya secara default. Saya tidak ingat pernah mengetik apt-get install colrm.

manoflinux.dll
sumber
Ini tidak memberikan 50n karakter pertama. Ini memberikan n karakter untuk setiap baris teks
bsmoo
Dan colrmmengerti utf8.
Skippy le Grand Gourou
9

tidak harus menggunakan grep juga

sebuah contoh:

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

Ketat dengan sed:

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

Untuk mencetak N karakter pertama Anda dapat menghapus karakter N + 1 sampai akhir baris:

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

Bagaimana dengan kepala ?

echo alonglineoftext | head -c 9
Sergey Papyan
sumber