使用bbcode创建一个格式化的字符串

时间:2014-04-15 18:35:54

标签: arrays bash multidimensional-array bbcode

我有一个HTML表格,其中包含一些关于战队的玩家信息。我的目标是将此HTML表格转换为某些bbcode。

源HTML就是这样的:http://www.wa-sta.net/index.php?menu=clan&clanid=1091&get=members

bbcode应该将表格格式化为以下内容:

    #      Position        Nickname        Region  Level   Kills   Deaths  KD/R
    1      Leader          Syrocs          Germany 56      76,307  58,677  1.3
    2      Manager         Syroxs          Germany 55      69,472  64,729  1.073
    3      Manager         checker284      Germany 43      43,827  62,385  0.703
    4      Member          Jeynox          Germany 77      206,387 185,675 1.112
    ...

所需的代码如下:

    [table]
    [tr][td][b]#[/b][/td][td][td][b]Position[/b][/td][td][b]Nickname[/b][/td][td][b]Region[/b][/td][td][b]Level[/b][/td][td][b]Kills[/b][/td][td][b]Deaths[/b][/td][td][b]KD/R[/b][/td][/tr]
    [tr][td]1[/td][td]Leader Syrocs[/td][td]Germany[/td][td]56[/td][td]76,307[/td][td]58,677[/td][td]1.3[/td][/tr]
    .
    .
    .
    [/table]

我的脚本可以正确获取信息,但我的问题是,我不知道如何使用整个bbcode创建一个字符串......

该脚本具有以下实际代码:

    #!/bin/bash
    # Fetch current level of client from WA-STA.NET
    WASTA_USER_URL="http://www.wa-sta.net/index.php?menu=clan&clanid=1091&get=members"
    # Create temp files
    TEMPFILE_1=$(mktemp /tmp/wasta_download_page-XXXXX)
    TEMPFILE_2=$(mktemp /tmp/wasta_download_page-XXXXX)
    TEMPFILE_3=$(mktemp /tmp/wasta_download_page-XXXXX)
    TEMPFILE_4=$(mktemp /tmp/wasta_download_page-XXXXX)

    # Download 'WA-STA.com Clanmember List'
    wget $WASTA_USER_URL -q -O - > $TEMPFILE_1
    # Get the clanlist
    sed -n "/<tbody>/,/<\/table>/p" $TEMPFILE_1 > $TEMPFILE_2
    cat $TEMPFILE_2 | tr "\n" "|" | grep -o '<tr>.*</tr>' | sed 's/\(<tr>\|<\/tr>\)//g' | sed 's/|/\n/g' > $TEMPFILE_3

    ROW=1
    while read line; do
            if [ $ROW -eq 1 ]; then
                    # ID
                    echo "$line" | egrep -o '<td>[0-9]+<\/td>' | egrep -o '[0-9]+'
            elif [ $ROW -eq 2 ]; then
                    # Position
                    echo "$line" | egrep -o 'Leader|Manager|Member'
            elif [ $ROW -eq 3 ]; then
                    # Nickname
                    echo "$line" | egrep -o '[a-zA-Z0-9]+<\/' | egrep -o '[a-zA-Z0-9]+'
            elif [ $ROW -eq 4 ]; then
                    # Region
                    echo "$line" | egrep -o '\/img\/flags\/[a-zA-Z]+-Flag-48.png'
            elif [ $ROW -eq 5 ]; then
                    # Level
                    echo "$line" | egrep -o 'iLevel-LevelIcon_L[0-9]+' | egrep -o '[0-9]+'
            elif [ $ROW -eq 6 ]; then
                    # Kills
                    echo "$line" | egrep -o '[0-9\,?]+'
            elif [ $ROW -eq 7 ]; then
                    # Deaths
                    echo "$line" | egrep -o '[0-9\,?]+'
            elif [ $ROW -eq 8 ]; then
                    echo "$line" | egrep -o '[0-9\.?]+'
            fi

            if [[ $? -eq 0 ]]; then
                    let "ROW = $ROW + 1"
                    if [ $ROW -eq 9 ]; then
                            ROW=1
                            echo "-------------------------------------------"
                    fi
            fi
    done < $TEMPFILE_3 > $TEMPFILE_4

    cat $TEMPFILE_4

    rm $TEMPFILE_1
    rm $TEMPFILE_2
    rm $TEMPFILE_3
    rm $TEMPFILE_4

    exit 0;

...如果我执行它,则返回以下内容:

    $ ./script.sh
    1
    Leader
    Syrocs
    /img/flags/Germany-Flag-48.png
    56
    76,307
    58,677
    1.3
    -------------------------------------------
    2
    Manager
    Syroxs
    /img/flags/Germany-Flag-48.png
    55
    69,472
    64,729
    1.073
    -------------------------------------------
    3
    Manager
    checker284
    /img/flags/Germany-Flag-48.png
    44
    43,827
    62,385
    0.703
    -------------------------------------------
    4
    Member
    Jeynox
    /img/flags/Germany-Flag-48.png
    73
    206,387
    185,675
    1.112
    -------------------------------------------
    5
    Member
    0xtime2rushx0
    /img/flags/Germany-Flag-48.png
    64
    1,767
    1,003
    1.762
    -------------------------------------------
    6
    Member
    FireFox7x
    /img/flags/Germany-Flag-48.png
    59
    60,913
    42,815
    1.423
    -------------------------------------------
    7
    Member
    xxl3aaamxx
    /img/flags/Germany-Flag-48.png
    52
    29,408
    25,937
    1.134
    -------------------------------------------
    8
    Member
    moechtegern
    /img/flags/Germany-Flag-48.png
    46
    34,986
    36,034
    0.971
    -------------------------------------------
    9
    Member
    Syroxz
    /img/flags/Germany-Flag-48.png
    45
    16,371
    21,166
    0.773
    -------------------------------------------
    10
    Member
    xFameB0zZ
    /img/flags/Germany-Flag-48.png
    43
    38,007
    31,258
    1.216
    -------------------------------------------
    11
    Member
    xDirtyCrash7x
    /img/flags/Germany-Flag-48.png
    40
    37,959
    24,787
    1.531
    -------------------------------------------
    12
    Member
    michii1992
    /img/flags/Austria-Flag-48.png
    35
    27,993
    18,076
    1.549
    -------------------------------------------
    13
    Member
    GymBeast
    /img/flags/Germany-Flag-48.png
    35
    14,220
    11,958
    1.189
    -------------------------------------------
    14
    Member
    vanillaz55
    /img/flags/Germany-Flag-48.png
    35
    24,575
    18,936
    1.298
    -------------------------------------------
    15
    Member
    xNiino
    /img/flags/Germany-Flag-48.png
    34
    15,093
    11,157
    1.353
    -------------------------------------------
    16
    Member
    Lowglette88
    /img/flags/Germany-Flag-48.png
    30
    1,472
    1,473
    0.999
    -------------------------------------------
    17
    Member
    stumpf7
    /img/flags/Germany-Flag-48.png
    29
    18,463
    19,397
    0.952
    -------------------------------------------
    18
    Member
    xChAoSxSKiLLzzx
    /img/flags/Switzerland-Flag-48.png
    27
    15,545
    13,434
    1.157
    -------------------------------------------
    19
    Member
    xeasybeatzzx
    /img/flags/Germany-Flag-48.png
    25
    7,782
    9,709
    0.802
    -------------------------------------------
    20
    Member
    utzmaster1
    /img/flags/Germany-Flag-48.png
    19
    8,202
    12,065
    0.68
    -------------------------------------------
    21
    Member
    Jaynox
    /img/flags/Germany-Flag-48.png
    19
    1,711
    2,065
    0.829
    -------------------------------------------
    22
    Member
    ETOJohnson
    /img/flags/Germany-Flag-48.png
    17
    3,707
    3,904
    0.95
    -------------------------------------------
    23
    Member
    xphoenix7
    /img/flags/Germany-Flag-48.png
    16
    3,930
    3,067
    1.281
    -------------------------------------------
    24
    Member
    Vegetox
    /img/flags/Germany-Flag-48.png
    13
    824
    3,224
    0.256
    -------------------------------------------
    25
    Member
    Walr0ssMAnn
    /img/flags/Germany-Flag-48.png
    11
    1,851
    1,701
    1.088
    -------------------------------------------
    26
    Member
    0xtime2f4mex0
    /img/flags/Germany-Flag-48.png
    2
    503
    310
    1.623
    -------------------------------------------
    27
    Member
    Raiinbow7x
    /img/flags/Germany-Flag-48.png
    2
    93
    31
    3
    -------------------------------------------
    28
    Member
    xL1MiTx
    /img/flags/Germany-Flag-48.png
    1
    3
    4
    0.75
    -------------------------------------------

我希望,有人可以帮助我。 :/

2 个答案:

答案 0 :(得分:2)

将脚本的输出作为输入

awk 'BEGIN {print "[table]";ORS=""; print "[tr][td][b]#[/b][/td][td][td][b]Position[/b][/td][td][b]Nickname[/b][/td][td][b]Region[/b][/td][td][b]Level[/b][/td][td][b]Kills[/b][/td][td][b]Deaths[/b][/td][td][b]KD/R[/b][/td][/tr]"} {for(i=0;i<8;i++){gsub(/[[:space:]]$|^[ \t]+|\/img\/flags\/|-Flag-48.png/,"",$0);arr[i]="[td]"$0"[/td]";getline;} print "\n[tr]"; for(i in arr) print arr[i]; print "[/tr]";} END{print "\n[/table]";}' input.txt

输入:

1
Leader
Syrocs
/img/flags/Germany-Flag-48.png
56
76,307
58,677
1.3
-------------------------------------------
2
Manager
Syroxs
/img/flags/Germany-Flag-48.png
55
69,472
64,729
1.073
-------------------------------------------
3
Manager
checker284
/img/flags/Germany-Flag-48.png
44
43,827
62,385
0.703
-------------------------------------------
4
Member
Jeynox
/img/flags/Germany-Flag-48.png
73
206,387
185,675
1.112
-------------------------------------------
5
Member
0xtime2rushx0
/img/flags/Germany-Flag-48.png
64
1,767
1,003
1.762
-------------------------------------------
6
Member
FireFox7x
/img/flags/Germany-Flag-48.png
59
60,913
42,815
1.423
-------------------------------------------
7
Member
xxl3aaamxx
/img/flags/Germany-Flag-48.png
52
29,408
25,937
1.134
-------------------------------------------
8
Member
moechtegern
/img/flags/Germany-Flag-48.png
46
34,986
36,034
0.971
-------------------------------------------
9
Member
Syroxz
/img/flags/Germany-Flag-48.png
45
16,371
21,166
0.773
-------------------------------------------
10
Member
xFameB0zZ
/img/flags/Germany-Flag-48.png
43
38,007
31,258
1.216
-------------------------------------------
11
Member
xDirtyCrash7x
/img/flags/Germany-Flag-48.png
40
37,959
24,787
1.531
-------------------------------------------
12
Member
michii1992
/img/flags/Austria-Flag-48.png
35
27,993
18,076
1.549
-------------------------------------------
13
Member
GymBeast
/img/flags/Germany-Flag-48.png
35
14,220
11,958
1.189
-------------------------------------------
14
Member
vanillaz55
/img/flags/Germany-Flag-48.png
35
24,575
18,936
1.298
-------------------------------------------
15
Member
xNiino
/img/flags/Germany-Flag-48.png
34
15,093
11,157
1.353
-------------------------------------------
16
Member
Lowglette88
/img/flags/Germany-Flag-48.png
30
1,472
1,473
0.999
-------------------------------------------
17
Member
stumpf7
/img/flags/Germany-Flag-48.png
29
18,463
19,397
0.952
-------------------------------------------
18
Member
xChAoSxSKiLLzzx
/img/flags/Switzerland-Flag-48.png
27
15,545
13,434
1.157
-------------------------------------------
19
Member
xeasybeatzzx
/img/flags/Germany-Flag-48.png
25
7,782
9,709
0.802
-------------------------------------------
20
Member
utzmaster1
/img/flags/Germany-Flag-48.png
19
8,202
12,065
0.68
-------------------------------------------
21
Member
Jaynox
/img/flags/Germany-Flag-48.png
19
1,711
2,065
0.829
-------------------------------------------
22
Member
ETOJohnson
/img/flags/Germany-Flag-48.png
17
3,707
3,904
0.95
-------------------------------------------
23
Member
xphoenix7
/img/flags/Germany-Flag-48.png
16
3,930
3,067
1.281
-------------------------------------------
24
Member
Vegetox
/img/flags/Germany-Flag-48.png
13
824
3,224
0.256
-------------------------------------------
25
Member
Walr0ssMAnn
/img/flags/Germany-Flag-48.png
11
1,851
1,701
1.088
-------------------------------------------
26
Member
0xtime2f4mex0
/img/flags/Germany-Flag-48.png
2
503
310
1.623
-------------------------------------------
27
Member
Raiinbow7x
/img/flags/Germany-Flag-48.png
2
93
31
3
-------------------------------------------
28
Member
xL1MiTx
/img/flags/Germany-Flag-48.png
1
3
4
0.75
-------------------------------------------

输出:

[table]
[tr][td][b]#[/b][/td][td][td][b]Position[/b][/td][td][b]Nickname[/b][/td][td][b]Region[/b][/td][td][b]Level[/b][/td][td][b]Kills[/b][/td][td][b]Deaths[/b][/td][td][b]KD/R[/b][/td][/tr]
[tr][td]1[/td][td]Leader[/td][td]Syrocs[/td][td]Germany[/td][td]56[/td][td]76,307[/td][td]58,677[/td][td]1.3[/td][/tr]
[tr][td]2[/td][td]Manager[/td][td]Syroxs[/td][td]Germany[/td][td]55[/td][td]69,472[/td][td]64,729[/td][td]1.073[/td][/tr]
[tr][td]3[/td][td]Manager[/td][td]checker284[/td][td]Germany[/td][td]44[/td][td]43,827[/td][td]62,385[/td][td]0.703[/td][/tr]
[tr][td]4[/td][td]Member[/td][td]Jeynox[/td][td]Germany[/td][td]73[/td][td]206,387[/td][td]185,675[/td][td]1.112[/td][/tr]
[tr][td]5[/td][td]Member[/td][td]0xtime2rushx0[/td][td]Germany[/td][td]64[/td][td]1,767[/td][td]1,003[/td][td]1.762[/td][/tr]
[tr][td]6[/td][td]Member[/td][td]FireFox7x[/td][td]Germany[/td][td]59[/td][td]60,913[/td][td]42,815[/td][td]1.423[/td][/tr]
[tr][td]7[/td][td]Member[/td][td]xxl3aaamxx[/td][td]Germany[/td][td]52[/td][td]29,408[/td][td]25,937[/td][td]1.134[/td][/tr]
[tr][td]8[/td][td]Member[/td][td]moechtegern[/td][td]Germany[/td][td]46[/td][td]34,986[/td][td]36,034[/td][td]0.971[/td][/tr]
[tr][td]9[/td][td]Member[/td][td]Syroxz[/td][td]Germany[/td][td]45[/td][td]16,371[/td][td]21,166[/td][td]0.773[/td][/tr]
[tr][td]10[/td][td]Member[/td][td]xFameB0zZ[/td][td]Germany[/td][td]43[/td][td]38,007[/td][td]31,258[/td][td]1.216[/td][/tr]
[tr][td]11[/td][td]Member[/td][td]xDirtyCrash7x[/td][td]Germany[/td][td]40[/td][td]37,959[/td][td]24,787[/td][td]1.531[/td][/tr]
[tr][td]12[/td][td]Member[/td][td]michii1992[/td][td]Austria[/td][td]35[/td][td]27,993[/td][td]18,076[/td][td]1.549[/td][/tr]
[tr][td]13[/td][td]Member[/td][td]GymBeast[/td][td]Germany[/td][td]35[/td][td]14,220[/td][td]11,958[/td][td]1.189[/td][/tr]
[tr][td]14[/td][td]Member[/td][td]vanillaz55[/td][td]Germany[/td][td]35[/td][td]24,575[/td][td]18,936[/td][td]1.298[/td][/tr]
[tr][td]15[/td][td]Member[/td][td]xNiino[/td][td]Germany[/td][td]34[/td][td]15,093[/td][td]11,157[/td][td]1.353[/td][/tr]
[tr][td]16[/td][td]Member[/td][td]Lowglette88[/td][td]Germany[/td][td]30[/td][td]1,472[/td][td]1,473[/td][td]0.999[/td][/tr]
[tr][td]17[/td][td]Member[/td][td]stumpf7[/td][td]Germany[/td][td]29[/td][td]18,463[/td][td]19,397[/td][td]0.952[/td][/tr]
[tr][td]18[/td][td]Member[/td][td]xChAoSxSKiLLzzx[/td][td]Switzerland[/td][td]27[/td][td]15,545[/td][td]13,434[/td][td]1.157[/td][/tr]
[tr][td]19[/td][td]Member[/td][td]xeasybeatzzx[/td][td]Germany[/td][td]25[/td][td]7,782[/td][td]9,709[/td][td]0.802[/td][/tr]
[tr][td]20[/td][td]Member[/td][td]utzmaster1[/td][td]Germany[/td][td]19[/td][td]8,202[/td][td]12,065[/td][td]0.68[/td][/tr]
[tr][td]21[/td][td]Member[/td][td]Jaynox[/td][td]Germany[/td][td]19[/td][td]1,711[/td][td]2,065[/td][td]0.829[/td][/tr]
[tr][td]22[/td][td]Member[/td][td]ETOJohnson[/td][td]Germany[/td][td]17[/td][td]3,707[/td][td]3,904[/td][td]0.95[/td][/tr]
[tr][td]23[/td][td]Member[/td][td]xphoenix7[/td][td]Germany[/td][td]16[/td][td]3,930[/td][td]3,067[/td][td]1.281[/td][/tr]
[tr][td]24[/td][td]Member[/td][td]Vegetox[/td][td]Germany[/td][td]13[/td][td]824[/td][td]3,224[/td][td]0.256[/td][/tr]
[tr][td]25[/td][td]Member[/td][td]Walr0ssMAnn[/td][td]Germany[/td][td]11[/td][td]1,851[/td][td]1,701[/td][td]1.088[/td][/tr]
[tr][td]26[/td][td]Member[/td][td]0xtime2f4mex0[/td][td]Germany[/td][td]2[/td][td]503[/td][td]310[/td][td]1.623[/td][/tr]
[tr][td]27[/td][td]Member[/td][td]Raiinbow7x[/td][td]Germany[/td][td]2[/td][td]93[/td][td]31[/td][td]3[/td][/tr]
[tr][td]28[/td][td]Member[/td][td]xL1MiTx[/td][td]Germany[/td][td]1[/td][td]3[/td][td]4[/td][td]0.75[/td][/tr]
[/table]

答案 1 :(得分:0)

您的脚本检索/解析网站上的数据已被破坏,因为它保留了一些html标记。 这是一个工作版本(不包括bbcode标签)

#!/bin/bash
# Fetch current level of client from WA-STA.NET
WASTA_USER_URL="http://www.wa-sta.net/index.php?menu=clan&clanid=1091&get=members"
# Create temp files
TEMPFILE_1=$(mktemp /tmp/wasta_download_page-XXXXX)
TEMPFILE_2=$(mktemp /tmp/wasta_download_page-XXXXX)
TEMPFILE_4=$(mktemp /tmp/wasta_download_page-XXXXX)

# Download 'WA-STA.com Clanmember List'
wget $WASTA_USER_URL -q -O - > $TEMPFILE_1
# Get the clanlist
sed -n "/<tbody>/,/<\/table>/p" $TEMPFILE_1 | tr "\n" " " | \
sed 's/\(<tr>\|<\/tr>\)/\n/g'  > $TEMPFILE_2

entries=()
while read line; do

    entries+=("$(echo $line | sed -e 's:</td>:</td>\n:g' | \ 
                perl -ne 'print "$1" if /<td.*?>(.*?)<\/td>/ ' | \
                sed -r "s:<div class='iLevel-LevelIcon_L([0-9]+)'[^>]*>:\\1:g" | \
                sed -r "s:<img.*title='([^']*)'[^>]*>:\\1:g" | \
                sed -e 's:<[^><]*>::g' | sed -r 's:\s+:|:g')")

done < $TEMPFILE_2


   printf "%s\n" "${entries[@]}"

rm $TEMPFILE_1
rm $TEMPFILE_2

exit 0;

<强>输出:

1|Leader|Syrocs|Germany|56|76,307|58,677|1.3|
2|Manager|Syroxs|Germany|55|69,472|64,729|1.073|
3|Manager|checker284|Germany|44|43,827|62,385|0.703|
4|Member|Jeynox|Germany|73|206,387|185,675|1.112|
5|Member|0xtime2rushx0|Germany|64|1,767|1,003|1.762|
6|Member|FireFox7x|Germany|59|60,913|42,815|1.423|
7|Member|xxl3aaamxx|Germany|52|29,408|25,937|1.134|
8|Member|moechtegern|Germany|46|34,986|36,034|0.971|
9|Member|Syroxz|Germany|45|16,371|21,166|0.773|
10|Member|xFameB0zZ|Germany|43|38,007|31,258|1.216|
11|Member|xDirtyCrash7x|Germany|40|37,959|24,787|1.531|
12|Member|michii1992|Austria|35|27,993|18,076|1.549|
13|Member|GymBeast|Germany|35|14,220|11,958|1.189|
14|Member|vanillaz55|Germany|35|24,575|18,936|1.298|
15|Member|xNiino|Germany|34|15,093|11,157|1.353|
16|Member|Lowglette88|Germany|30|1,472|1,473|0.999|
17|Member|stumpf7|Germany|29|18,463|19,397|0.952|
18|Member|xChAoSxSKiLLzzx|Switzerland|27|15,545|13,434|1.157|
19|Member|xeasybeatzzx|Germany|25|7,782|9,709|0.802|
20|Member|utzmaster1|Germany|19|8,202|12,065|0.68|
21|Member|Jaynox|Germany|19|1,711|2,065|0.829|
22|Member|ETOJohnson|Germany|17|3,707|3,904|0.95|
23|Member|xphoenix7|Germany|16|3,930|3,067|1.281|
24|Member|Vegetox|Germany|13|824|3,224|0.256|
25|Member|Walr0ssMAnn|Germany|11|1,851|1,701|1.088|
26|Member|0xtime2f4mex0|Germany|2|503|310|1.623|
27|Member|Raiinbow7x|Germany|2|93|31|3|
28|Member|xL1MiTx|Germany|1|3|4|0.75|