我有一个文本文件,想要提取所有匹配" blue"
的接口random text random text random text
random text random text
int 1
random text
blue
random text
random text
int 2
random text
random text
red
random text
int 3
random text
random text
random text
blue
random text
random text
int 4
blue
random text
int n
random text
value
random text
random text random text random text
random text random text
通缉输出:
int 1
blue
int 3
blue
int 4
blue
int n
blue
(注意int 2是"红色"因此不显示)
我试过了:grep" int" -A n file.txt | grep" blue"但是只显示匹配" blue"的行。我还要显示匹配" int"的行。部分长度也可以变化,因此使用-A n并不是很有用。
答案 0 :(得分:2)
awk解决方案可能如下:
awk '/^int/{interface = $0} /blue/{print interface; print $0}' input.txt
它始终保存最新发现的界面。如果找到blue
,则会打印存储的界面和包含blue
的行。
答案 1 :(得分:2)
另一种解决方案
将适用于多重布鲁斯
sed -n '/^int/{x;/blue/{p;d}};/blue/H' file
random text random text random text
random text random text
int 1
random text
blue
blue
random text
random text
int 2
random text
random text
red
random text
int 3
random text
random text
random text
blue
random text
random text
int 4
blue
blue
blue
blue
blue
random text
int n
random text
value
random text
random text random text random text
random text random text
int 1
blue
blue
int 3
blue
int 4
blue
blue
blue
blue
blue
答案 2 :(得分:1)
一种可能的GNU sed解决方案
sed -n '/^int\|blue/p' file | sed -r ':a; N; $! ba; s/int \w*\n(int)/\1/g; s/int \w*$//'
输出
int 1
blue
int 3
blue
int 4
blue
答案 3 :(得分:1)
sed '/^int/ h
/^[[:space:]]*blue/ {x;G;p;}
d
' YourFile
添加(后)约束
阐释:
{x;G;p;}
(其他操作根据H;x;p
或{H;g;p
之类的任何其他兴趣提供相同的内容{1}},在这种情况下,这是标题破坏性的,但使用s///
可能是保守的)