2011-10-26 3 views
0

필자는 증분 할 변수 배열이있는 html 파일을 가지고 있습니다. 나는 그것을 손으로하고있다. 그러나 지금은 내 시간을 너무 많이 차지한다. 나는 정확한 도구/구문을 찾고 내가 원하는 것을 정확하게하려고 노력했다. awk regex and add 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 -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 

012 전화

$ script offset < inputfile 

이것은 외부의 오버 헤드가없는 bash입니다.