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 = (value)'

注意:可以有“n”个这样的内容,但我只想复制 ilmb_cntlr 的地址

我怎样才能做到这一点?

一旦地址被复制'例如0x0003ffff,我希望它被复制为0x0003FFB0'

最后两个 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 回答