2016-12-07 13 views
-1

特定の文字のすべての位置をBashスクリプトを使用してファイル内に見つける必要があります。私はこの文字(##)のためのすべての場所を取得し、同様にそれらを保存したい上記のファイルではファイル内の文字の位置を見つけて位置bashを保存します

assert property ((req1 == 0) ##1 (req1 == 1) ##1 !(req2 == 1) || (gnt1 == 0)); 
assert property ((req1 == 0) ##1 !(req1 == 1) || (gnt1 == 1)); 
assert property ((req1 == 1 && req2 == 0) ##1 !(req2 == 1) || (gnt1 == 0)); 

これは、ファイルがどのように見えるかです。どのようにこれはシェルスクリプトを使用して行うことができますか?

+3

「場所」とはどういう意味ですか?たぶん、線の前からゼロインデックスの位置? –

+2

3つの '# 'が現れたらどうなりますか? – 123

+1

ファイルの先頭から「locatoin」= 1を基準にしていますか?私たちが人々に**コードを修正するのを手伝っているように**あなたが試したことは何ですか?**(あなたのQを更新してください、コメントで返信しないでください)。がんばろう。 – shellter

答えて

0

この

#!/bin/bash 

str1="assert property ((req1 == 0) ##1 (req1 == 1) ##1 !(req2 == 1) || (gnt1 == 0));" 
str2="assert property ((req1 == 0) ##1 !(req1 == 1) || (gnt1 == 1));" 
str3="assert property ((req1 == 1 && req2 == 0) ##1 !(req2 == 1) || (gnt1 == 0));" 

char="##" 

awk -v a="$str1" -v b="$char" 'BEGIN{print index(a,b)}' | xargs expr -1 + 
awk -v a="$str2" -v b="$char" 'BEGIN{print index(a,b)}' | xargs expr -1 + 
awk -v a="$str3" -v b="$char" 'BEGIN{print index(a,b)}' | xargs expr -1 + 

位置はこれらの例32、32及び45である試し。しかし、それぞれに## charの最初の出現しかありません。より多くの出演を必要とするかどうかはわかりません。

awk -F'##' ' 
{ 
    for(i=1;i<NF;i++){ 
    printf "%d ",length($i)+offset+1 
    offset+=length($i)+length(FS) 
    } 
    printf "\n" 
    offset=0 
}' file 

パラメータの区切り-Fがあなたのパターンとして設定されている:あなたは、このためのawkを使用することができますthis post

+0

Theres 4 occurences ... – 123

+0

ありがとうございます。ありがとうございます。ありがとうございますが、この文字のファイル内のすべての位置を知る必要があります。 – mii9

1

のデニスWilliamsonsコメントから抽出された

ソリューション。

ライン($1$2 ...)の全ての部分をループし、実際にパターンの位置(複数の一致を含むであろうラインのoffset追加)を示し、各部分の長さを印刷します。

関連する問題