2013-10-02 51 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的正則表達式在第6個位置,而不是從下一個新線開始。它結束了返回:

this i 
s a se 
ntence 
123456 
7890.. 

我在做什麼錯在這裏?

+0

什麼是'*'在那裏做? – Bergi

回答

4

爲什麼使用grep,您可以使用簡單的cut命令:

cut -c1-6 file 

要不然這更復雜的sed也將工作:

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

讓我笑了..爲什麼在'cut'時使用'grep'更簡單,或者比簡單的'grep'更復雜一些:) –

+0

@sudo_O:我相信沒有其他命令可以擊敗'cut'的簡單。順便說一句'grep -Eo「^。{6}」'在OSX上甚至都不適合我。 – anubhava

+0

我設法匹配它沒有擊敗它http://stackoverflow.com/a/19142970/1066031嗯我登錄到Mac似乎它不錨定與'^'*('人'說,它應該)* ..奇怪!? –

1

使用以下命令:

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

上述命令省略與< 6字符的行。包括這些線,使用下面的命令:

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

你使用的是什麼版本的grep?這不起作用2.5.1 RHEL-6上的GNU grep。 – iamauser

+0

@iamauser,我正在使用GNU grep * 2.14 *。 – falsetru

+0

'echo'這是一句話'| grep的-EO 「^ {6}」'將實際打印3行:'此i', 單曲一個se', 'ntence' – anubhava

0

如果要使用grep,請嘗試

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

無需正則表達式:

$ pr -mtw6 file 
this i 
123456 
string