3

我正在尝试从 a<和 a之间的文件中提取文本>,但仅在以另一个特定模式开头的行上。

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

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

但这似乎根本不起作用。

有什么建议么?他们将不胜感激。

(抱歉格式化,以前从未在这里发布过)

4

3 回答 3

6
sed -n '/^ZZZ/ { s/^.*\(<.*>\).*$/\1/p }'
于 2013-11-06T21:55:02.403 回答
1

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

grep '^ZZZ' | grep -o '<[^>]*>'
于 2013-11-06T22:00:01.270 回答
0

一个awk版本

awk -F"<|>" '/^ZZZ/ {print "<"$2">"}' file
<\This is the text I need>
于 2013-11-07T07:32:03.340 回答