bash - 在 bash 中最后一次出现字符串后插入新行

标签 bash awk sed newline

我正在尝试在 bash 中最后一次出现字符串后添加一个新行。

例如,如果我有以下文本:

GG1 test-35
GG1 test-38
GG1 test-40

HH1 test-52
HH1 test-60
HH1 test-32
HH1 test-40

LL1 test-101
LL1 test-99
LL1 test-24

假设我想在“HH” block 的末尾添加一个新行,所以它会变成:

HH1 test-52
HH1 test-60
HH1 test-32
HH1 test-40
HH1 test-56

到目前为止,我已尝试使用 sed 和 awk,但似乎无法正确使用。如果我可以搜索实际的测试编号(如 HH1 test-40),这很简单,但我唯一可以搜索的是首字母缩写词。所以我需要最后一行出现 HH1,然后在它之后添加一个新行。

感谢任何帮助。

最佳答案

用 gawk 快速且肮脏:

 awk 'BEGIN{RS="";ORS="\n\n"}/^HH/{$0=$0"\nHH1 test-56"}7' file

它很脏,因为它在输出末尾留下了一个空行。

关于bash - 在 bash 中最后一次出现字符串后插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25567351/

相关文章:

perl - 使用 awk 或 perl 从 CSV 中提取特定列(解析)

linux - 如何使用任何 Linux 工具打印 FILENAME 前面的每个文件的第 n(第 5)行?

Sed 在 Windows 中创建不可删除的文件

linux - 缩进与单词匹配的行,然后用替换打印它们

regex - 让 sed 对变量而不是标准输入或文件进行操作

node.js - 类似于 Node 中的 bash -x

linux - 如何始终从所有命令中突出显示终端上的某些单词

linux - Zcat + awk 带绝对路径

linux - 非交互式、非登录 shell 的 ash 中有哪些初始化文件?

bash - 从文件读取时,通过 SSH 编写 sudo 脚本的行为很奇怪