在未缩进的标题下查找缩进的行

时间:2019-03-25 17:08:29

标签: bash

我需要解析文件,但是我不知道解析代码。

文件示例:

proces.review_SCAN2.status
              ONLINE  ONLINE       tsdumca12  
proces.review_SCAN3.status
              ONLINE  ONLINE       tsdumca12   
proces.kick
              ONLINE  ONLINE       tsdumca11             
              ONLINE  ONLINE       tsdumca12       
              OFFLINE OFFLINE                      
proces.test01_ica01.test.opp
              ONLINE  ONLINE       tsdumca11 

我需要的结果:

grep proces.kick

              ONLINE  ONLINE       tsdumca11             
              ONLINE  ONLINE       tsdumca12       
              OFFLINE OFFLINE    

grep proces.review_SCAN2.status

            ONLINE  ONLINE       tsdumca12

我需要从名称“ proces.review_SCAN2.status”中查找到最后一行。我尝试使用正则表达式,但我不明白。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

grep无法跨线存储状态,因此对于此工作而言,这是一个糟糕的选择。请考虑使用awk

findSection() {
  awk -v tgt_section="$1" '
    /^[[:alpha:]]/ { curr_section=$1 }
    /^[[:space:]]/ && curr_section == tgt_section { print $0 }
  '
}

findSection proces.kick <inFile

^[[:alpha:]]是一个以字母字符开头的正则表达式匹配行;当脚本看到一个脚本时,它将变量curr_section设置为具有该值。

^[[:space:]]是一个以空格开头的正则表达式匹配行;当脚本看到一个脚本时,如果curr_sectiontgt_section变量具有相同的值,则将其打印出来。