簡體   English   中英

將grep用於輸出文件中多行的多個模式

[英]Using grep for multiple patterns from multiple lines in a output file

我有一個像文件中捕獲的數據輸出。

  • 列出item1

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是someval12 ”的情況下從數據列表中提取attrib1,attrib3,attrib4。

請注意attrib3和attrib4可以在attrib2之后的任何順序。

到目前為止,我嘗試使用帶-A和-B選項的grep但我需要指定行號,這是一種我不想做的硬編碼。

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

我可以使用grep的任何其他選項,但不涉及為此示例指定之前和之后的出現?

Grep和其他工具(如join,sort,uniq)的工作原理是“每行一條記錄”。 因此可以使用三步管:

  1. 使用sed將每個列表項轉換為單行。
  2. 使用grep進行過濾。
  3. 使用sed轉換回原始格式。

首先,您需要選擇一個已知在輸入中不會出現的字符,並將其用作分隔符。 例如,'|'。

然后,找到步驟1的sed命令,該命令將輸入​​轉換為格式

  • 列表項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 |

現在第2步很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM