我正在寻找一个shell命令来查找文本文件中模式的起始索引。指数从0开始。例如:
#test.txt
hello
world
# The newline character is just a normal character
$ command test.txt world
6
$ command test.txt o
4, 7
答案 0 :(得分:2)
仔细阅读manpage之后,我找到了grep的-bo
开关。我使用的是GNU grep 3.1版。这对我来说很有用,但可能不适用于UTF- *编码文件,因为它只显示字节偏移量。
grep -bo world test.txt
答案 1 :(得分:0)
您可以使用此awk
:
cat srch.awk
BEGIN{RS=FS=""}
{
s=$0
k=0
while (n=index(s, kw)) {
k+=n
printf "%d ", k-1
s=substr(s, n+length(kw))
}
print ""
}
现在将其用作:
awk -v kw='world' -f srch.awk test.txt
6
awk -v kw='o' -f srch.awk test.txt
4 7
答案 2 :(得分:0)
使用GNU awk进行多字符RS和RT:
$ awk -v RS='world' 'RT!=""{print sum+length()} {sum+=length($0 RT)}' file
6
$ awk -v RS='o' 'RT!=""{print sum+length()} {sum+=length($0 RT)}' file
4
7