2010-08-29 13 views
6

thể trùng lặp:
RegEx match open tags except XHTML self-contained tagsBắt văn bản từ bên trong một thẻ HTML trong một tập tin địa phương với grep

Trích Từ Input File

<TD class="clsTDLabelWeb" width="28%">Municipality:&nbsp;</TD> 
<TD style="WIDTH: 394px" class="clsTDLabelSm" colSpan="5"> 
<span id="DInfo1_Municipality">JUPITER</span></TD> 

Regular Expression My

(?<=<span id="DInfo1_Municipality">)([^</span>]*) 

Tôi có một tệp HTML được lưu vào đĩa. Tôi muốn sử dụng grep để tìm kiếm thông qua tệp và xuất nội dung của một khoảng cụ thể, mặc dù tôi không biết đây có phải là sử dụng đúng đắn của grep hay không. Khi tôi chạy grep trên tập tin với biểu thức đọc từ một tập tin khác (vì vậy tôi không mess up thoát bất kỳ ký tự đặc biệt), nó không sản xuất bất cứ điều gì. Tôi đã thử nghiệm các biểu thức trong RegExr và nó phù hợp với "JUPITER" đó là chính xác những gì tôi muốn trả lại. Cảm ơn rất nhiều vì sự giúp đỡ của bạn!

mong muốn Output

JUPITER 
+2

http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags/1732454 # 1732454 – msw

Trả lời

1

Grep không hỗ trợ loại regex (lookbehind khẳng định), và một công cụ rất nghèo của mình cho điều này, nhưng đối với ví dụ cho nó là hoàn toàn khả thi, sẽ phá vỡ dưới nhiều situtions .

grep -io "<span id=\"DInfo1_Municipality\">.*</span>" file.htlm | grep -io ">[^<]*" | grep -io [^>]* 

điều gì đó điên rồ như vậy, không phải là ý hay.

+0

Cảm ơn bạn. Tôi có cảm giác tôi đang cố gắng làm điều gì đó mà grep không ủng hộ. Có vẻ như tôi sẽ phải thực hiện một số chương trình thực tế. –

1
sed -n '/DInfo1_Municipality/s/<\/span.*//p' file | sed 's/.*>//' 
3

này cung cấp cho một thử:

sed -n 's|^<span id="DInfo1_Municipality">\([^<]*\)</span></TD>$|\1|p' file 

hoặc với GNU grep và regex của bạn:

grep -Po '(?<=<span id="DInfo1_Municipality">)([^</span>]*)' 
+0

Vượt qua cờ -P để grep cho phép tôi thực hiện lookbehind/lookahead mà tôi đã theo dõi. cảm ơn vì tiền hỗ trợ – james