假设我有一个文件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>
谢谢!
由于*
是贪婪的,因此在第一次</div>
使用单个 grep 之前进行匹配并非易事。您可以使用 Perl 惰性量词*?
:
perl -lane '{print $1 if m!(content.*?</div>)!}' input
也可以稍微修改一下 grep 表达式,但是会不太灵活:
grep -o 'content">[^>]*</div>' input
使用惰性匹配:
grep -P -o 'content.*?</div>' t1.txt
您需要该-P
标志才能使用 perl 语法,因为 grep 默认情况下不支持延迟匹配。
编者注:在大多数情况下,使用正则表达式解析 HTML 并不是一个好主意。