sed命令之:a;N与!ba:s含义
输入文件为:
### update test.student
### WHERE
### @1=1 /* int meta=0 */
### @2='a' /* int meta=0 */
### @3=1 /* int meta=0 */
### @4='56' /* int meta=0 */
### SET
### @1=1 /* int meta=0 */
### @2='a' /* int meta=0 */
### @3=1 /* int meta=0 */
### @4='failture' /* int meta=0 */
### update test.student
执行命令为:
sed '/WHERE/{:a;N;/SET/!ba;s/\\(### @1=1.*\\)/jim\n\1/g}' xxx
因 优快云 显示问题,测试命令请将以上命令的 \\ 替换为 \
执行结果为:
### update test.student
### WHERE
jim
### @1=1 /* int meta=0 */
### @2='a' /* int meta=0 */
### @3=1 /* int meta=0 */
### @4='56' /* int meta=0 */
### SET
### @1=1 /* int meta=0 */
### @2='a' /* int meta=0 */
### @3=1 /* int meta=0 */
### @4='failture' /* int meta=0 */
### update test.student
命令解释:
/WHERE/{:a;N;/SET/!ba;s/....}'
一对花括号表示执行的a;N、!ba;s命令块
这里先选取从WHERE开始到SET结束的命令块进行s/指定的命令替换。
s/中的(### @1=1.*\),用()括起来给后面引用,后面的\1就是引用()的内容,即在匹配行前面增加jim这一行数据。
删除 jim 这一行,使用以下命令:
sed '/WHERE/{:a;n;/jim/d;/### @1=1.*/!ba}' xxx