2011-10-26 109 views
0

我有一個html文件,需要增加一些變量數組。我一直在手工做 - 但現在正在佔用我太多的時間。我一直在尋找並試圖找到正確的工具/語法來完成我想要的工作。awk正則表達式並添加1

說我有:

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

我希望做的是有腳本添加一個變量號給我的房間前面增添更多變數。我可以指定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 

任何意見? ?

+0

嗯。你想做一些補充。我不知道可以執行這樣的事情的正則表達式。可能你需要至少使用一些腳本語言。 – 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

更輕鬆:

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,沒有外部開銷。