根据手册,选项-b可以给出给定事件的字节偏移量,但它似乎是从已解析内容的开头开始的。
我需要检索grep返回的每个匹配内容的位置。我使用了这一行,但是非常难看:
WSAEventSelect()
如何通过更有效地使用GNU utils以更优雅的方式完成它?
示例:
WSAPoll()
(实际上,此命令行不输出行号,但添加它并不难。)
答案 0 :(得分:2)
在任何UNIX盒的任何shell中使用任何awk(GNU或其他方式):
$ awk -v re='efg' -v OFS=':' '{
end = 0
while( match(substr($0,end+1),re) ) {
print NR, end+=RSTART, substr($0,end,RLENGTH)
end+=RLENGTH-1
}
}' test.txt
1:5:efg
1:13:efg
awk中的所有字符串,字段,数组索引都从1开始,而不是零,因此输出结果看起来不像您的那样,因为awk您的输入字符串是:
123456789012345
abcdefg abcdefg
而不是:
012345678901234
abcdefg abcdefg
如果您希望使用0索引的字符串,可以随意将上面的代码更改为end+=RSTART-1
和end+=RLENGTH
。
答案 1 :(得分:1)
Perl不是GNU util,但可以很好地解决您的问题:
perl -nle 'print "$.:$-[0]" while /efg/g'