我在文件中捕获了类似的数据输出。
attrib1:someval11
attrib2:someval12
attrib3:someval13
attrib4:someval14
attrib1:someval21
attrib2:someval12
attrib4:someval24
attrib3:someval23
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的任何其他选项,它不涉及为此示例指定之前和之后的事件吗?
答案 0 :(得分:0)
Grep和其他工具(如join,sort,uniq)的工作原理是“每行一条记录”。因此可以使用3步管道:
首先,您需要选择一个已知未在输入中出现的字符,并将其用作分隔符。例如,'|'。
然后,找到步骤1的sed命令,该命令将输入转换为格式
现在第2步很简单。