0

ファイル system.mss があります。ファイルの内容の一部は次のとおりです。

BEGIN lmb_bram_if_cntlr
PARAMETER INSTANCE = dlmb_cntlr_0
PARAMETER HW_VER = 3.00.b
PARAMETER C_BASEADDR = 0x00000000
PARAMETER C_HIGHADDR = 0x0003ffff
BUS_INTERFACE SLMB = dlmb_0
BUS_INTERFACE BRAM_PORT = calmb_0_BRAM_PORTA
END

BEGIN lmb_bram_if_cntlr
PARAMETER INSTANCE = ilmb_cntlr_0
PARAMETER HW_VER = 3.00.b
PARAMETER C_BASEADDR = 0x00000000
PARAMETER C_HIGHADDR = 0x0003ffff
BUS_INTERFACE SLMB = ilmb_0
BUS_INTERFACE BRAM_PORT = ilmb_cntlr_0_BRAM_PORT
END

BEGIN lmb_bram_if_cntlr
PARAMETER INSTANCE = dlmb_cntlr_1
PARAMETER HW_VER = 3.00.b
PARAMETER C_BASEADDR = 0x00000000
PARAMETER C_HIGHADDR = 0x0000ffff
BUS_INTERFACE SLMB = dlmb_1
BUS_INTERFACE BRAM_PORT = calmb_1_BRAM_PORTA
END

BEGIN lmb_bram_if_cntlr
PARAMETER INSTANCE = ilmb_cntlr_1
PARAMETER HW_VER = 3.00.b
PARAMETER C_BASEADDR = 0x00000000
PARAMETER C_HIGHADDR = 0x0000ffff
BUS_INTERFACE SLMB = ilmb_1
BUS_INTERFACE BRAM_PORT = ilmb_cntlr_1_BRAM_PORT
END

「PARAMETER INSTANCE = ilmb_cntlr_n」に対してのみ「PARAMETER C_HIGHADDR = (値)」をコピーしたい

注:そのようなコンテンツは「n」個存在する可能性がありますが、ilmb_cntlr のアドレスのみをコピーしたい

どうやってやるの?

アドレスがコピーされたら、' たとえば 0x0003ffff を 0x0003FFB0 としてコピーしたい'

最後の 2 つの ff は B0 に置き換えられます

その他の「f」は「F」に置き換えられ、残りのアドレスは同じままです

どうやってやるの?

4

1 に答える 1

2

これがbashソリューションです:

while read line ; do
    if [[ $line =~ ^PARAMETER\ INSTANCE\ =\ ilmb_cntlr_[0-9] ]] ; then
        found=1
    fi
    if [[ $line =~ ^PARAMETER\ C_HIGHADDR\ =\  ]] ; then
        value=$line
    fi
    if [[ $line = '' ]] ; then                      # end of block
        if (($found)) ; then                        # we are interested in the block
            value=${value//f/F}                     # capitalize f's
            echo ${value%FF}B0                      # replace last two characters with B0
        fi
        unset found                                 # reset variables so we can check the next block
        unset value
    fi
done

ただし、このようなタスクにはPerlを使用したいと思います。

于 2012-05-09T09:43:50.730 に答える