gpt4 book ai didi

linux - 对输出文件中多行的多个模式使用 grep

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:47 25 4
gpt4 key购买 nike

我在文件中捕获了类似这样的数据输出。

  • 列出第 1 项

attrib1: someval11

attrib2: someval12

attrib3: someval13

attrib4: someval14

  • 列出第 2 项

attrib1: someval21

attrib2: someval12

attrib4: someval24

attrib3: someval23

  • 列出第 3 项

attrib1: someval31

attrib2: someval32

attrib3: someval33

attrib4: someval34

仅当“attrib2 is someval12”时,我才想从数据列表中提取 attrib1、attrib3、attrib4。

请注意,attrib3 和 attrib4 可以在 attrib2 之后以任何顺序排列。

到目前为止,我尝试将 grep 与 -A 和 -B 选项一起使用,但我需要指定行号,这是一种硬编码,我不想这样做。

grep -B 1 -A 1 -A 2 "attrib2: someval12"| egrep -w "attrib1|attrib3|attrib4"

我可以使用 grep 的任何其他选项,它不涉及为此示例指定发生前后的事件吗?

最佳答案

Grep 和其他工具(如 join、sort、uniq)按照“每行一条记录”的原则工作。因此可以使用 3 步管道:

  1. 使用 sed 将每个列表项转换为一行。
  2. 使用 grep 进行过滤。
  3. 使用 sed 转换回原始格式。

首先您需要选择一个已知不会出现在输入中的字符,并将其用作分隔符。例如,“|”。

然后,找到步骤 1 的 sed 命令,它将输入转换为格式

  • 列表 item1|attrib1: someval11|attrib2: someval12|attrib3: someval13|attrib4: someval14|
  • 列表 item2|attrib1: someval21|attrib2: someval12|attrib4: someval24|attrib3: someval23|
  • 列表 item3|attrib1: someval31|attrib2: someval32|attrib3: someval33|attrib4: someval34|

现在第 2 步很简单。

关于linux - 对输出文件中多行的多个模式使用 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40373495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com