Chinaunix

标题: 脚本处理文件,有些复杂,高手进 [打印本页]

作者: 308123027    时间: 2016-07-08 09:56
标题: 脚本处理文件,有些复杂,高手进
本帖最后由 308123027 于 2016-07-08 09:59 编辑

有两个Kconfig文件,A和B,现在要将B的内容同步到A,由于B不是从A直接修改过来(因此不能用diff + patch动作来操作),需要将B的内容找出来对应修改A的内容,

比如:A中config MTK_NET下default n,B中为default y

其中if MTK_NET ... endif中有config NET_AAAAA_GF_TEE,现在要将起替换为B中内容

所有这些必须在menu ... endmenu,  if MTK_NET ... endif这样的对应范围内修改

最后将修改后内容写回A

KconfigA内容如下:
#
#NET
#
menu "NET support"
        depends on !UML

config MTK_NET
        tristate "Mediatek NET"
        default n
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports BBBBB's N/K device.

if MTK_NET

config BBBBB_NET
        tristate "BBBBB NET"
        default n
        ---help---
        BBBBB NET BBBBB's N/K device.

config NET_AAAAA_GF_TEE
        tristate "AAAAA NET"
        default n
        ---help---
        AAAAA NET chip M TEE driver

endif
endmenu


KconfigB,内容如下:

menu "NET support"
        depends on !UML

config MTK_NET
        tristate "Mediatek NET"
        default y
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports AAAAA's M... device.

if MTK_NET

config AAAAA_NET
        tristate "AAAAA NET"
        default y
        ---help---
        AAAAA NET chip M TEE driver

config AAAAA_SENSOR_TYPE
        string "SENSOR_TYPE"
        default "M"
        ---help---
        Must input sensor type, or default is M

endif
endmenu




作者: sunzhiguolu    时间: 2016-07-08 10:16
本帖最后由 sunzhiguolu 于 2016-07-08 10:19 编辑

回复 1# 308123027
以 KconfigA, KconfigB 为例, 将你希望得到的结果 贴出来, 看的更加直观些. (有特殊要求的地方请注明, 谢谢!)

另外,
比如:A中config MTK_NET下default n,B中为default y

这里单独拿出来说一下, 有什么特殊的含义吗?

   
作者: 308123027    时间: 2016-07-08 10:45
回复 2# sunzhiguolu
也就是说要找到对应的block,并将其值同步过去。请问在A中找

config MTK_NET
        tristate "Mediatek NET"
        default n
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports BBBBB's N/K device.
这样的一大段,如何处理??

比如我要从A中删除

config NET_AAAAA_GF_TEE
        tristate "AAAAA NET"
        default n
        ---help---
        AAAAA NET chip M TEE driver


这样一大段,如何处理??

   
作者: 308123027    时间: 2016-07-08 10:55
回复 2# sunzhiguolu

我打算这么处理:
1)先从A中清除与B修改相关的内容

config MTK_NET
        tristate "Mediatek NET"
        default n
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports BBBBB's N/K device.



2)再从B中读取对应的block 插入A中

    config MTK_NET
        tristate "Mediatek NET"
        default y
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports AAAAA's M... device.

下面的也类似,这样是否可行?
作者: sunzhiguolu    时间: 2016-07-08 11:00
回复 3# 308123027
请问在A中找

config MTK_NET
        tristate "Mediatek NET"
        default n
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports BBBBB's N/K device.
这样的一大段,如何处理??


比如我要从A中删除

config NET_AAAAA_GF_TEE
        tristate "AAAAA NET"
        default n
        ---help---
        AAAAA NET chip M TEE driver


这样一大段,如何处理??


第一个问题你明白了, 第二个相信你应该不在话下.
  1. perl -00 -nle 'print if(/\Aconfig MTK_NET/)' a
复制代码
config MTK_NET
        tristate "Mediatek NET"
        default n
        ---help---
        NET mtk driver enable/disable in the kernel.
        Say Y here if you want to use mediatek NET driver,
        NET driver will support NET function in REE,
        it supports BBBBB's N/K device.

   
作者: 308123027    时间: 2016-07-08 11:02
回复 5# sunzhiguolu


    可以不用perl吗,我不会那个,用sed, awk之类的
作者: liion631818    时间: 2016-07-08 11:04
回复 4# 308123027

1. 读取A文件的内容,写入临时文件,如果遇到要替换的内容,读取B中目标内容写入临时文件
2. 重复步骤1,直到A读取完成
3. 删除或者重命名A
4. 把临时文件改成A

   
作者: liion631818    时间: 2016-07-08 11:06
回复 6# 308123027
  1. sed '/config NET_AAAAA_GF_TEE/,/^$/d' A
复制代码

作者: sunzhiguolu    时间: 2016-07-08 11:12
当我看完您的帖子时, 有不明白的地方才会想您发问.
毕竟你对待处理的文件非常了解, 其他人只能从你的简短的问题描述中理解你的需求 ...
作者: 308123027    时间: 2016-07-08 11:17
回复 7# liion631818


    不能一条一条的找,主要是一大块一大块处理
作者: 308123027    时间: 2016-07-08 11:18
回复 9# sunzhiguolu


    能得到你们回复,太高兴,谢谢,第一次发贴求助。
作者: 308123027    时间: 2016-07-08 11:23
回复 8# liion631818

倘若

        AAAAA NET chip M TEE driver
endif

之间没有空行就处理不了哦!

    config NET_AAAAA_GF_TEE
        tristate "AAAAA NET"
        default n
        ---help---
        AAAAA NET chip M TEE driver
endif
作者: sunzhiguolu    时间: 2016-07-08 11:24
回复 6# 308123027
和你的情况一样, 我也是小菜鸟啊. 对 sed, awk 不熟悉呀. 不过您好像抓住了问题的重点, 按替换, 嗯 说的好!

   
作者: liion631818    时间: 2016-07-08 11:44
所有的事情的有一定规则,什么都没有是处理不了回复 12# 308123027


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2