Получить шаблон startindex с помощью grep или аналогичного - PullRequest
0 голосов
/ 25 мая 2018

Я ищу команду оболочки, чтобы найти начальный индекс шаблона в текстовом файле.Индексы начинаются с 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 голосов
/ 25 мая 2018

Вы можете использовать это 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
0 голосов
/ 25 мая 2018

С 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
0 голосов
/ 25 мая 2018

Внимательно прочитав справочную страницу , я нашел переключатель -bo для grep.Я использую GNU grep версии 3.1.Это помогло мне, но может не сработать для файлов в кодировке UTF- *, так как он показывает только смещение байтов.

grep -bo world test.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...