使用SED / AWK在第一个模式后面和下一个模式上方添加行前导空格

时间:2016-08-30 22:07:18

标签: bash awk sed

输入:

define {    abcd 模式    xyzs wedlenle    jqwd sadjkjnd }

define {    abcd asjdanja    xyzs wedlenle    jqwd sadjkjnd }

define {    adkja 模式    xyzs wedlenle    jqwd sadjkjnd }

预期产出:

define {    abcd 模式    xyzs wedlenle    jqwd sadjkjnd    的 addtext

}

define {    abcd asjdanja    xyzs wedlenle    jqwd sadjkjnd

}

define {    adkja 模式    xyzs wedlenle    的 addtext

}

需要在"}"之前在同一个定义块中添加行(前导空格)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

试试这个:

awk '
/pattern/ { f=1 }
/}/ {
    if (f) {
        sub(/[^[:space:]].*/,"",last)
        print last "addtext"
        f=0
    }
}
{ print }
NF { last = $0 }
' file
define {

       abcd **pattern**
       xyzs wedlenle
       jqwd sadjkjnd


       addtext
}

define {

       abcd asjdanja
       xyzs wedlenle
       jqwd sadjkjnd


}

define {

       adkja **pattern**
       xyzs wedlenle
       jqwd sadjkjnd


       addtext
}

我不相信你的真实输入文件中存在所有那些尾随空白行,这就是为什么我在这个答案中不费力地处理它们。