bugfix> bash > 投稿

テキストファイル内のパターンの開始インデックスを見つけるシェルコマンドを探しています。インデックスは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 件
  • マンページをより注意深く読んだ後、 -bo が見つかりました  grepのスイッチ。 GNU grepバージョン3.1を使用しています。これは私にとってはうまくいきましたが、バイトオフセットを表示するだけなので、UTF- *エンコードファイルでは機能しない可能性があります。

    grep -bo world test.txt

  • この 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
    
    

  • マルチ文字RSおよびRT用のGNU awkの場合:

    $ 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
    
    

あなたの答え