linux中结合sed和grep的全局文本替换示例

目录

基本语法

实战例

注意点


基本语法

sed -i "s/oldstring/newstring/g" `grep oldstring -rl path` 

        -i 表示inplace edit,就地修改文件
        -r 表示递归式地搜索子目录
        -l 表示输出匹配的文件名

        oldstring:原字符串

        newstring:要替换成为的新字符串

        path:路径,可以是一个文件路径,也可以是一个目录路径

实战例

        在myfolder有两组字符串需要替换:

        (1) RTSEL(2'b01) --> RTSEL(2'b00);

        (2) WTSEL(2'b01) --> WTSEL(2'b00);

        首先,查询一下RTSEL的存在状况:

>> grep -rn "RTSEL" myfolder

myfolder/APERTURE_DATA_PREPARE.sv:73:    .RTSEL(2'b01),
myfolder/APERTURE_DATA_PREPARE.sv:109:    .RTSEL(2'b01),
myfolder/APERTURE_DATA_PREPARE.sv:145:    .RTSEL(2'b01),
myfolder/CHROMA_DATA_PREPARE.sv:74:    .RTSEL(2'b01),
myfolder/CHROMA_DATA_PREPARE.sv:111:    .RTSEL(2'b01),
myfolder/CHROMA_DATA_PREPARE.sv:148:    .RTSEL(2'b01),
myfolder/CHROMA_DATA_PREPARE.sv:185:    .RTSEL(2'b01),
myfolder/LUMA_GEN.sv:85:    .RTSEL(2'b01),
myfolder/LUMA_GEN.sv:122:    .RTSEL(2'b01),
myfolder/LUMA_GEN.sv:159:    .RTSEL(2'b01),
myfolder/LUMA_GEN.sv:196:    .RTSEL(2'b01),         

         然后,执行sed + grep命令进行替换,并再次用grep搜索确认:

>> sed -i "s/WTSEL(2'b01)/WTSEL(2'b00)/g" `grep "WTSEL(2'b01)" -rl myfolder`

>> grep -rn "RTSEL" myfolder

myfolder/APERTURE_DATA_PREPARE.sv:73:    .RTSEL(2'b00),
myfolder/APERTURE_DATA_PREPARE.sv:109:    .RTSEL(2'b00),
myfolder/APERTURE_DATA_PREPARE.sv:145:    .RTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:74:    .RTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:111:    .RTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:148:    .RTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:185:    .RTSEL(2'b00),
myfolder/LUMA_GEN.sv:85:    .RTSEL(2'b00),
myfolder/LUMA_GEN.sv:122:    .RTSEL(2'b00),
myfolder/LUMA_GEN.sv:159:    .RTSEL(2'b00),
myfolder/LUMA_GEN.sv:196:    .RTSEL(2'b00),

        对WTSEL也依葫芦画瓢:

 >> sed -i "s/WTSEL(2'b01)/WTSEL(2'b00)/g" `grep "WTSEL(2'b01)" -rl myfolder`
>> grep -rn "WTSEL" myfolder
myfolder/APERTURE_DATA_PREPARE.sv:74:    .WTSEL(2'b00),
myfolder/APERTURE_DATA_PREPARE.sv:110:    .WTSEL(2'b00),
myfolder/APERTURE_DATA_PREPARE.sv:146:    .WTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:75:    .WTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:112:    .WTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:149:    .WTSEL(2'b00),
myfolder/CHROMA_DATA_PREPARE.sv:186:    .WTSEL(2'b00),
myfolder/LUMA_GEN.sv:86:    .WTSEL(2'b00),
myfolder/LUMA_GEN.sv:123:    .WTSEL(2'b00),
myfolder/LUMA_GEN.sv:160:    .WTSEL(2'b00),
myfolder/LUMA_GEN.sv:197:    .WTSEL(2'b00),

        确实蛮灵嘎。。。

注意点

        grep命令前后是一对“`”,不是单引号,是键盘左上角的那个!

        sed命令中的oldstring和newstring不需要双引号围起来。

        grep命令的字符串可用双引号“”围起来,也可以不用。


 

猜你喜欢

转载自blog.csdn.net/chenxy_bwave/article/details/131055608
今日推荐