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

3
我应该使用哪个正则表达式来从grep -in输出中仅获取行号? 通常的输出如下所示: 241113:关键字
我需要从sed的输出中仅获取“241113”。

给你的问题和优秀回答点个赞!很遗憾在SO上有很多人只点赞回答而不点赞问题 :( - SyntaxT3rr0r
5个回答

7

我建议剪切

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

如果你坚持使用sed命令:
 grep -in keyword ... | sed 's/:.*$//g

4
你不需要使用sed。cut就足够了。只需将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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接