首页 > 解决方案 > 通过 Bash 更改 txt 文件

问题描述

我有一个看起来像的文本文件

file:/path/to/file
..
..
DA:34,0,0
DA:86,0,0
DA:87,0,0
..
DA:89,0,0
file:/path/to/file
..
DA:23,0,1
..
DA:24,0,1
DA:25,0,1
..

我只想在以“file”开头的行之后保留以“DA”开头的第一行。必须删除以“DA”开头的其他行。还有很多其他的行(我用“..”标记它们),它们也需要保留。

结果应如下所示:

file:/path/to/file
..
..
DA:34,0,0
..
file:/path/to/file
..
DA:23,0,1
..
..

有谁能够帮我?我将不胜感激。谢谢

标签: linuxbashawksed

解决方案


这与使用 sed 或 awk 打印匹配模式后的行密切相关。

你所追求的是:

awk '/^file/{f=1}(f&&/^DA/){f=0;print}!/^DA/' file

这是如何运作的?

  • /^file/{f=1}:如果你发现一行以 "file" 开头,设置一个标志f1
  • (f&&/^DA/){f=0;print}如果标志f不为零,并且行以 开头DA,则打印该行并将标志设置为零。这确保您只打印第一个DAafter file
  • !/^DA/:打印所有不以开头的行DA

一个较短的版本:

awk '/^file/{f=1}(f--&&/^DA/);!/^DA/' file

推荐阅读