使用带有sed的正则表达式删除匹配模式正下方的行

时间:2014-09-17 00:21:12

标签: regex sed

我要在此文本中删除包含日期和页码的行。

我尝试删除包含发票,金额,储物柜数据的行下方的行。但无法找出正确的正则表达式。

  

     

发票金额储物柜

     

489 849560.94 12

     

2014年8月3日星期三Page 1 ##删除

     

UB99

     

发票金额储物柜

     

512 1204873.89 99

     

2014年2月1日星期一##删除

我在尝试:

sed -i' /正则表达式/ {n; d;}'

有没有其他方法可以做同样的事情?

2 个答案:

答案 0 :(得分:0)

如果您要删除的行包含"页面",请尝试通过匹配页面删除该行,如下所示:

sed -i '/page/Id' file_name

答案 1 :(得分:0)

以下是使用awk

删除模式匹配后的下一行的方法
cat file
Axis
Invoice Amount Locker
489 849560.94 12
Wednesday, August 2014 Page 1## to delete
UB99
Invoice Amount Locker
512 1204873.89 99
Monday, February 2014 Page 4## to delete

awk '/^Invoice/ {i=2} i--!=1' file
Axis
Invoice Amount Locker
Wednesday, August 2014 Page 1## to delete
UB99
Invoice Amount Locker
Monday, February 2014 Page 4## to delete

如果您想删除第二行跳转:只需增加i

awk '/^Invoice/ {i=3} i--!=1' file
Axis
Invoice Amount Locker
489 849560.94 12
UB99
Invoice Amount Locker
512 1204873.89 99

这是另一种方式。它存储行号并删除我们不想要的内容:

awk '/^Invoice/ {n=NR} !(n && NR==n+1)' file
Axis
Invoice Amount Locker
Wednesday, August 2014 Page 1## to delete
UB99
Invoice Amount Locker
Monday, February 2014 Page 4## to delete

awk '/^Invoice/ {n=NR} !(n && NR==n+2)' file
Axis
Invoice Amount Locker
489 849560.94 12
UB99
Invoice Amount Locker
512 1204873.89 99