2013-10-02 3 views
0

У меня возникают проблемы с захватом первых 6 символов каждой строки. Предположив у меня есть следующие строки внутри text.txt:захват первых n символов каждой строки

this is a sentence 
1234567890 
string 

Я хотел бы получить первые 10 символов:

this i 
123456 
string 

Я попытался запустить grep -Eo "^[a-zA-Z0-9]*{6}" text.txt

Но Grep перерабатывает регулярное выражение на каждой шестой позиции, а не на следующей новой строке. он заканчивается возвратом:

this i 
s a se 
ntence 
123456 
7890.. 

что я делаю неправильно здесь?

+0

Что означает '*' там делать? – Bergi

ответ

4

Почему использовать grep, вы можете использовать простую cut команду:

cut -c1-6 file 

или иначе это более сложный СЭД будет также работать:

sed 's/^\(.\{6\}\).*$/\1/' file 
+1

Сделал меня смехом .. зачем использовать 'grep', когда' cut' проще или как-то сложнее простого 'grep' :) –

+0

@sudo_O: Я считаю, что никакая другая команда не может побить простоту' cut'. btw 'grep -Eo" ^. {6} "даже не работал для меня на OSX. – anubhava

+0

Мне удалось сопоставить его, не побив его http://stackoverflow.com/a/19142970/1066031 Хммм Я вошел в Mac, кажется, что он не привязан к '^' * ('man' говорит, что он должен) * .. странный!? –

1

Используйте следующую команду:

grep -Eo "^.{6}" text.txt 

Над командой опустить строки с < 6 символов. Чтобы включить такие строки, используйте следующую команду:

grep -Eo "^.{1,6}" text.txt 
+1

какая версия grep вы используете? Это не работает 2.5.1 GNU grep на RHEL-6. – iamauser

+0

@iamauser, я использую GNU grep * 2.14 *. – falsetru

+0

'echo 'это предложение' | grep -Eo "^. {6}" 'на самом деле напечатает 3 строки:' this i', 's se', ' ntence' – anubhava

0

Если вы хотите использовать grep, тогда попробуйте

grep -Po "^.{6}" text.txt 
0

Нет необходимости в регулярных выражениях:

$ pr -mtw6 file 
this i 
123456 
string 
Смежные вопросы