Sed | awk在匹配下一行后删除行

时间:2017-06-14 06:10:24

标签: regex linux bash awk sed

如果Name背靠背,则删除名字

Name john
Age 30

Name Alice

Name Travis
Age 12

Name Monty

Name Hannah

期望的输出

Name john
Age 30

Name Travis
Age 12

Name Hannah

我试过的命令:

sed '/^Name/ {N; /\n$/d}' file.txt

sed '/Name/{$!N;/\n\nName/!P;D}' file.txt

3 个答案:

答案 0 :(得分:1)

您可以使用此awk命令:

.container {
  position: relative;
}

.arrow {
  font-size: 5em;
  position: absolute;
}

.anim {
  height: 5px;
  background-color: white;
  position: absolute;
  width: 100%;
  animation: blink 1s linear alternate infinite;
}

@keyframes blink {
  from {
    height: 0px;
  }
  to {
    height: 55px;
  }
}

答案 1 :(得分:1)

这是使用awk

的方法

awk_script:

BEGIN{a=0}                                                                                                                                                                                                   
/Name/{ if(a==1){print $0;name=""}else{name=$0"\n"} a=1 }
/Age/{printf "%s%s\n\n",name,$0; a=0;}

然后执行:

$ awk -f awk_sc file.txt
Name john
Age 30

Name Travis
Age 12

Name Hannah

简要解释:

变量a是用于记录先前是否显示Name的标志。在打印行后设置a=0

答案 2 :(得分:0)

可能不是您正在寻找的,但为什么不尝试只保留您感兴趣的内容。

 sed -n '/^Name/ {N; /Age.*/p}' file.txt

会给你以下结果

Name john
Age 30
Name Travis
Age 12