sed 对同一匹配执行多条命令

因为sed默认输出所有数据行,sed 's/a/b/g'处理,没有被匹配的数据正常输出
我想在sed 执行一条'/pattern/command' 命令之后继续编辑刚才匹配到的行,最终没有匹配的数据依然能
如果sed内部没有管道功能,只能sed -e '/pattern/command1'
-e '/pattern/command2' -e '/pattern/command3'
每次都要重新匹配模式

比如我想做以下处理:
Start file:

/Page0
SSD_Single(0xE0,0x00);

//--- PASSWORD  ----//
SSD_Single(0xE1,0x93);
SSD_Single(0xE2,0x65);
SSD_Single(0xE3,0xF8);

End file:

//Page0
data_arry[0] = 0x00E01500;
dsi_set_cmdq(data_array, 1, 1);
MDELAY(1);

//--- PASSWORD  ----//
data_arry[0] = 0x93E11500;
dsi_set_cmdq(data_array, 1, 1);
MDELAY(1);
data_arry[0] = 0x65E21500;
dsi_set_cmdq(data_array, 1, 1);
MDELAY(1);
data_arry[0] = 0xF8E31500;
dsi_set_cmdq(data_array, 1, 1);
MDELAY(1);
data_arry[0] = 0x03801500;
dsi_set_cmdq(data_array, 1, 1);
MDELAY(1);

我目前用这样的脚本:

    cat "${file}" | sed -r '
        s/^\s*\|\s*$//g
        s/^SSD_Single.*0x(.*),0x(.*)\);/0x\2\11500/
        s/^0x.*/data_arry[0] = &;/g
        /data_arry.*/a\dsi_set_cmdq(data_array, 1, 1);\nMDELAY(1);
        '

注意sed 第2~4行命令,实际上第2到第4行都是对同一行数据进行处理,但是在第3行和第4行命令却还要用0x和data_arry 进行匹配查找才能对同一行进行处理,我希望能在一条匹配之后继续在该匹配行执行多个命令

阅读 8.2k
3 个回答
cat "${file}" | sed -r -e '
        s/^\s*\|\s*$//g
        s/^SSD_Single.*0x(.*),0x(.*)\);/0x\2\11500/
        /^0x.*/{s//data_arry[0] = &;/;a\dsi_set_cmdq(data_array, 1, 1);\nMDELAY(1);' -e '}
        '
新手上路,请多包涵

明白了,谢谢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进