使用AWK在样式之间添加文本 [英] Add text between patterns using AWK

查看:107
本文介绍了使用AWK在样式之间添加文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入:

Define {
     abcd **pattern**
     xyzs wedlenle
     jqwd sadjkjnd 
} 
Define { 
     abcd asjdanja
     xyzs wedlenle
     jqwd sadjkjnd
}
Define {
     abcd **pattern**
     xyzs wedlenle
     jqwd sadjkjnd 
     ADD LINE HERE
}   

预期输出:

Define {
     abcd **pattern**
     xyzs wedlenle
     jqwd sadjkjnd 
     ADD LINE HERE
} 
Define { 
     abcd asjdanja
     xyzs wedlenle
     jqwd sadjkjnd
}
Define {
     abcd **pattern**
     xyzs wedlenle
     jqwd sadjkjnd 
     ADD LINE HERE
} 

需要**添加行**在}"之前定义块.

Need to **ADD LINE ** define block just before "}".

情况: 1)多种模式-在while循环中使用 2)添加的行应以空格开头 3)仅在同一区块中不存在的行中添加行.

Corner case: 1) Multiple pattern - used while loop 2) Added line should be leading with space 3) Only add line if it not exist alreday in same block.

推荐答案

$ awk '
/}/ {
    if (f) {
        sub(/[^[:space:]].*/,"",prev)
        print prev "ADD LINE HERE"
        f=0
    }
}
/pattern/ { f=1 }
{ prev=$0; print }
' file
Define {
     abcd **pattern**
     xyzs wedlenle
     jqwd sadjkjnd
     ADD LINE HERE
}
Define {
     abcd asjdanja
     xyzs wedlenle
     jqwd sadjkjnd
}

这篇关于使用AWK在样式之间添加文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆