使用sed只获取“grep -in”的行号

时间:2011-08-31 12:06:13

标签: regex bash sed

我应该使用哪个正则表达式才能从grep -in输出中获取行号? 通常的输出是这样的: 241113:关键字

我需要从sed的输出中获得“241113”。

5 个答案:

答案 0 :(得分:7)

我建议剪切

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

如果你坚持使用sed:

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

答案 1 :(得分:4)

您不需要使用sed。切就够了。只需将grep的输出传递给

cut -d ':' -f 1

举个例子:

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

答案 2 :(得分:2)

就个人而言,我喜欢awk

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

答案 3 :(得分:2)

如其他答案所述,cut是正确的工具;但如果你真的想使用瑞士军刀,你也可以使用awk

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

或再次使用grep

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

答案 4 :(得分: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