多模式匹配,打印匹配的模式和之前的行

3

我有一个带数据的文件

cell A
function (A1A2)
Next state
Test cell
Type combinational 
(CO)
output
(A1)
input
(A2)
input
cell X
function ((A1+A2)B)
Hold rising 
Type combinational 
Min_pulse_width
(Z)
output
(A1)
input
(A2)
input
(B)
input

我希望得到以下输出结果

cell A
function (A1A2)
Type combinational 
(CO)
output
(A1)
input
(A2)
input
cell X
function ((A1+A2)B)
Type combinational 
(Z)
output
(A1)
input
(A2)
input
(B)
input

输入文件包含多行上述格式的参数,但我只需要使用grep cell, function, type, output及其前一行,input及其前一行
我可以使用以下命令来提取cell、function、type
grep "cell|function|type" file

可以使用grep命令来搜索输出及其前一行和输入及其前一行,命令如下:

awk '/input/{print x;print};{x=$0}' file

awk '/output/{print x;print};{x=$0}' file 

但是我如何将上述3个步骤合并并得到输出结果呢?
3个回答

1
您可以尝试使用这个 awk 命令:
awk '/^(in|out)put/{print p; print} /^(cell|function|Type)/; {p = $0}' file

cell A
function (A1A2)
Type combinational
(CO)
output
(A1)
input
(A2)
input
cell X
function ((A1+A2)B)
Type combinational
(Z)
output
(A1)
input
(A2)
input
(B)
input

我尝试过这个,我能正确获取单元格函数类型,但是我无法获取输入和输出。 - Shreya
在输出中,您可以看到inputoutput行。也许尝试:awk '/^(in|out)put/{print p; print} /^(cell|function|Type)/; {p = $0}' file - anubhava

0
这可能适用于你(GNU sed):
sed -nE 'N;/^(cell|function|Type)/P;/\n(output|input)/p;D' file

关闭隐式打印-n并开启更简单的正则表达式-E

打开一个两行窗口。

使用模式匹配打印所需字符串。

删除所有内容并重复执行。


0
grep -Ev '(Next state)|(Test cell)|(Hold rising)|(Min_pulse_width)' file

使用-E启用正则表达式,使用-v进行反向搜索。然后列出您不想搜索的术语。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接