【问题标题】:using regex with sed to delete the line just below the matching pattern使用正则表达式和 sed 删除匹配模式正下方的行
【发布时间】:2014-09-17 13:42:08
【问题描述】:

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

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

发票金额储物柜

489 849560.94 12

2014 年 8 月,星期三,第 1 页## 删除

UB99

发票金额储物柜

512 1204873.89 99

2014 年 2 月星期一第 4## 页删除

我正在尝试:

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

有没有其他方法可以做到这一点?

【问题讨论】:

    标签: regex sed


    【解决方案1】:

    如果要删除的行包含“页面”,请尝试通过匹配页面删除该行,有些是这样的:

    sed -i '/page/Id' file_name
    

    【讨论】:

      【解决方案2】:

      这是使用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
      

      【讨论】:

        猜你喜欢
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        • 1970-01-01
        相关资源
        最近更新 更多