使用grep或类似方法获取模式startindex

时间:2018-05-25 11:24:56

标签: bash awk grep

我正在寻找一个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

3 个答案:

答案 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