sed找到与另一种模式一致的模式

时间:2013-11-06 21:49:01

标签: regex bash sed

我正在尝试从<>之间的文件中提取文本,但只能在以其他特定模式开头的行中提取。

所以在一个看起来像这样的文件中:

XXX Something here  
XXX Something more here  
XXX <\Lines like this are a problem> 
ZZZ something <\This is the text I need> 
XXX Don't need any of this

我只想打印<\This is the text I need>

如果我这样做

sed -n '/^ZZZ/p' FILENAME

它拉出了我需要看的正确线条,但显然打印出整条线。

sed -n '/<\/,/>/p' FILENAME prints way too much. 

我已经考虑过分组并尝试了

sed -n '/^ZZZ/{/<\/,/>/} FILENAME

但这似乎根本不起作用。

有什么建议吗?他们将非常感激。

(格式化道歉,以前从未发布过)

3 个答案:

答案 0 :(得分:6)

sed -n '/^ZZZ/ { s/^.*\(<.*>\).*$/\1/p }'

答案 1 :(得分:1)

如果它不必是sed且你有一个相当新的grep,你可以使用grep的选项-o,如

grep '^ZZZ' | grep -o '<[^>]*>'

答案 2 :(得分:0)

awk版本

awk -F"<|>" '/^ZZZ/ {print "<"$2">"}' file
<\This is the text I need>