linux - 通过 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
..
..
有谁能够帮我?我将不胜感激。谢谢
解决方案
你所追求的是:
awk '/^file/{f=1}(f&&/^DA/){f=0;print}!/^DA/' file
这是如何运作的?
/^file/{f=1}
:如果你发现一行以 "file" 开头,设置一个标志f
为1
(f&&/^DA/){f=0;print}
:如果标志f
不为零,并且行以 开头DA
,则打印该行并将标志设置为零。这确保您只打印第一个DA
afterfile
。!/^DA/
:打印所有不以开头的行DA
一个较短的版本:
awk '/^file/{f=1}(f--&&/^DA/);!/^DA/' file
推荐阅读
- android - 是否可以从已安装的 android 应用程序将信息记录到 android studio 中?
- angular - 带有语义 UI 的 Angular *NgIf
- list - 如何删除列表的重复项
(飞镖/颤振) - c++ - 你如何遍历一个向量并调用一个通用的覆盖函数?
- javascript - 如何使用 formcontrol 获取 datepicker 值
- java - Java VM 是否有缺陷,或者为什么反复使用 CompilationTask 和 Reflections 会导致软件缺陷?
- jenkins-pipeline - 无法解析类 org.yaml.snakeyaml.Yaml @Grab('org.yaml:snakeyaml:1.17') Jenkins 管道
- java - 尝试将 1 到 n 之间的所有数字加在一起时,代码不会返回总和
- javascript - 无法在 Hugo 静态站点生成器中将 JavaScript 变量作为参数传递
- python - 具有操作系统特定依赖性的 pip 包