2011-08-31 25 views
3

我應該使用哪個正則表達式來僅從grep -in輸出中獲取行號? 通常的輸出是這樣的: 241113:關鍵字使用sed只得到「grep -in」的行號

我需要從sed的輸出只得到「241113」。

+0

+1你的問題**和**偉大的答案。這真的太糟糕了,所以很多人對於upvote的答案沒有upvoting的問題:( – SyntaxT3rr0r

回答

7

我建議削減

grep -in keyword ... | cut -d: -f1 

如果你堅持使用sed:

grep -in keyword ... | sed 's/:.*$//g 
4

你並不需要使用SED。切就夠了。只是管的grep的輸出

cut -d ':' -f 1 

舉個例子:

grep -n blabla file.txt | cut -d ':' -f 1 
2

就個人而言,我喜歡AWK

grep -in 'search' file | awk --field-separator : '{print $1}' 
2

在其他的答案說,cut是正確的工具;但如果你真的想用一個瑞士軍刀,你也可以使用awk

grep -in keyword ... | awk -F: '{print $1}' 

,或者用grep

grep -in keyword ... | grep -oE '^[0-9]+' 
0

以防萬一有人想知道,如果這一切都可以做沒有grep,即單獨sed ...

echo ' 
a 
b 
keyword 
c 
keyWord 
x 
y 
keyword 
Keyword 
z 
' | 
sed -n '/[Kk][Ee][Yy][Ww][Oo][Rr][Dd]/{=;}' 
#sed -n '/[Kk][Ee][Yy][Ww][Oo][Rr][Dd]/{=;q;}' # only line number of first match