2011-10-26 21 views
0

私はインクリメントする必要のある可変配列を持つhtmlファイルを持っています。私は手でそれをやっている - しかし、今は自分の時間を過ごしている。私は探していて、正確なツール/構文を見つけようとしています。awk regexとadd 1

私が持っていると言う:

file[0]=["blah0 blah0", "file0.jpg"] 
file[1]=["blah1 blah1", "file1.jpg"] 
file[2]=["blah2 blah2", "file2.jpg"] 

私がやりたいどのようなスクリプトは私に以前より多くの変数を追加する余地を与える変数の数に1を追加しています。私は5を指定して、その結果がこれは私がこれまで試してみました何である

file[5]=["blah0 blah0", "file0.jpg"] 
file[6]=["blah1 blah1", "file1.jpg"] 
file[7]=["blah2 blah2", "file2.jpg"] 

なるかもしれない - しかし、あまり運...それはすべての角括弧

awk -F [\]\[] '/^file\[[0-9]+\]=/ {$2="["$2+'$userinput'"]";}1' ${workdirect}/index.html > text.txt 

何かアドバイス

を削除して?? ? Perlで

+0

Hm。あなたはいくつかの追加をしたい。私はそのようなことを行う正規表現を知らない。場合によっては、少なくともいくつかのスクリプト言語を使用する必要があります。 – FailedDev

+0

awk *はスクリプト言語です... – bos

答えて

1
#!/bin/bash 
FILE=$1 

awk '/^file/ { 
    m = match($0, "\[[0-9]+\]"); 
    if (m) { 
    printf("%s%d%s\n", 
      substr($0, 0, RSTART), 
      INC + substr($0, RSTART + 1, RLENGTH - 2), 
      substr($0, RSTART + 2, length($0) - RSTART)) 
    } 
}' INC=$2 $1 

$ foo.sh tmphtml 5 
file[5]=["blah0 blah0", "file0.jpg"] 
file[6]=["blah1 blah1", "file1.jpg"] 
file[7]=["blah2 blah2", "file2.jpg"] 
+0

これは私の望むことをするように見えますが、それはファイル14の後に乱数14,150,161,172,183の出力を開始します...任意のアイデア??? – dingerkingh

+0

申し訳ありませんが、私の悪い。最後のsubstrを 'substr($ 0、RSTART + RLENGTH-1、length($ 0)-RSTART))'に変更してください。 – bos

+1

ニース!そして、それはあなたの悪いことではありません - あなたは与えられた情報を持って行っていました! – dingerkingh

0

簡単:

perl -nle '$n = 5; /(file\[)([[:digit:]]+)(\]=\[.*\])/; print $1, $2 + $n, $3' 
+0

さらに簡単に: 'perl -pe 's/\ d +/$&+ 5/e'' –

0

最初の行は本当にファイル始まる場合は[0] =すべてがシーケンシャルで、これはうまくいくかもしれない:

awk 'sub(/[0-9]+/,'$userinput'+t) {print; t=t+1}' ${workdirect}/index.html > text.txt 
1

script

になりましょう
#!/bin/bash 
inc=$1 
while read line; do 
    p1=${line%%[*} 
    p3=${line#*]} 

    p2=${line#*[} 
    p2=${p2%%]*} 
    p2=$((${p2} + $inc)) 

    echo $p1[$p2]$p3 
done 

script

$ script offset < inputfile 

これは外部のオーバーヘッドではなく、単なるbashです。