我有这个文本文件(它实际上是html的一部分):
A
|_B
| |_D
| |_F
|_C
|_E
|_G
public class Foo
{
public virtual int FooId { get; set; }
public virtual IList<Foo> Children { get; set; }
public virtual Foo Parent { get; set; }
}
using (var session = NHibernateHelper.OpenSession())
{
var CC = session.CreateCriteria(typeof(Foo));
CC.SetFetchMode("Children", FetchMode.Eager);
return CC.List<Foo>();
}
我已经使用这个sed命令来提取“Mycity”
<tr>
<td width="10%" valign="top"><P>Name:</P></td>
<td colspan="2"><P>
XXXXX
</P></td>
</tr>
<tr>
<td width="10%" valign="top"><p>City:</p></td>
<td colspan="2"><p>
Mycity
</p></td>
</tr>
<tr>
<td width="10%" valign="top"><p>County:</p></td>
<td colspan="2"><p>
YYYYYY
</p></td>
</tr>
<tr>
<td width="10%" valign="top"><p>Map:</p></td>
<td colspan="2"><p>
ZZZZZZZZ
据我所知,正则表达式有效,但我得到
$ tr -d '\n' < file.html | sed -n 's/.*City:<\/p><\/td>.*<p>\(.*\)<\/p><\/td>.*/\1/p'
而不是Map:
。
我用Rubular测试了REGEX,但是没有用sed工作。 是不是正确的工具?我做错了什么?
PS:我正在使用Linux
答案 0 :(得分:2)
您现在遇到的问题是默认情况下正则表达式是贪婪的
self.request.session.update({
'path_one_images': PATH_ONE_IMAGES,
'images': images,
'slider_DV_values': slider_DV_values,
'instruction_task_one_images': INSTRUCTION_TASK_ONE_IMAGES,
'instruction_task_two_images': INSTRUCTION_TASK_TWO_IMAGES
})
所以它匹配到最后一节的所有内容。要非贪婪,请使用's/.*City:<\/p><\/td>.*<p>\(.*\)<\/p><\/td>.*/\1/p'
^ // here!
?
答案 1 :(得分:2)
sed始终是错误的工具。只需使用awk,就可以发明它:
$ awk 'c&&!--c; /City:/{c=2}' file.html
Mycity
请参阅Printing with sed or awk a line following a matching pattern