Как с помощью sed напечатать первые N символов строки?

110

Используя sedто , что это один вкладыш для печати первых п символов ? Я делаю следующее:

grep -G 'defn -test.*' OctaneFullTest.clj  | sed ....
Берлин Браун
источник

Ответы:

209

Не используйте sed, используйте cut:

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

Если вы ДОЛЖНЫ использовать sed:

grep ... | sed -e 's/^\(.\{12\}\).*/\1/'
Пол Томблин
источник
2
На самом деле система Cygwin, над которой я сейчас работаю cut, не сокращает ее, пока не сокращает sed.
kqw
Или даже sed -r 's/^(.{12}).*/\1/'.
fedorqui `` SO, перестань причинять вред '',
1
@fedorqui -rочевидно доступен в Linux, но не на Mac.
Пол Томблин
Точно, это недоступно в OSX.
fedorqui `` SO stop harming ''
1
К вашему сведению: cut -c 1-N(где N - число) действительно работает с моей установкой Cygwin (cygwin v. 2.6, cut v. 8.25). В OS X используйте, sed -Eа не sed -r, где-то еще.
wrlee
45
colrm x

Например, если вам нужны первые 100 символов:

cat file |colrm 101 

Он существует уже много лет и есть в большинстве Linux и BSD (конечно, во FreeBSD), обычно по умолчанию. Я не помню, чтобы мне когда-нибудь приходилось печатать apt-get install colrm.

Manoflinux
источник
Это не дает первых 50n символов. Он дает n символов для каждой строки текста
bsmoo
И colrmпонимает utf8.
Skippy le Grand Gourou,
9

не обязательно использовать grep

пример:

sed -n '/searchwords/{s/^\(.\{12\}\).*/\1/g;p}' file
призрачная собака74
источник
7

Строго с sed:

grep ... | sed -e 's/^\(.\{N\}\).*$/\1/'
Диего Севилья
источник
4

Чтобы напечатать первые N символов, вы можете удалить N + 1 символов до конца строки:

$ sed 's/.//5g' <<< "defn-test"
defn
SLePort
источник
3

Как насчет головы ?

echo alonglineoftext | head -c 9
Сергей Папян
источник