2

假设我有一个文件t1.txt

<div class="content"> main </div> <div class="data"> 100 </div>

如果我跑

grep -o "content.*</div>" t1.txt

它会回来

content"> main </div> <div class="data"> 100 </div>

我怎样才能在第一次遇到之前 grep 文本</div>?我想得到

content"> main </div>

谢谢!

4

2 回答 2

2

由于*是贪婪的,因此在第一次</div>使用单个 grep 之前进行匹配并非易事。您可以使用 Perl 惰性量词*?

perl -lane '{print $1 if m!(content.*?</div>)!}' input

也可以稍微修改一下 grep 表达式,但是会不太灵活:

grep -o 'content">[^>]*</div>' input
于 2013-08-31T23:20:21.780 回答
2

使用惰性匹配:

grep -P -o 'content.*?</div>' t1.txt

您需要该-P标志才能使用 perl 语法,因为 grep 默认情况下不支持延迟匹配。

编者注:在大多数情况下,使用正则表达式解析 HTML 并不是一个好主意。

于 2013-08-31T23:20:31.320 回答