2011-12-21 8 views
5

Tôi đang tìm kiếm khớp với tất cả các ký hiệu nhỏ hơn ('<') hoặc lớn hơn ('>') trong tệp bằng sed. Tôi chỉ muốn đối sánh với một ký tự đơnsed/regex: Cách đối sánh '<' or '>' trong một chuỗi

Mục tiêu của tôi là thay thế chúng bằng ' <''> ' (đảm bảo chúng có khoảng trắng xung quanh chúng để tôi có thể phân tích chúng dễ dàng hơn) tương ứng.

Ví dụ, nó sẽ phù hợp: (không có không gian bên trong các thẻ)

<p>Hey this is a paragraph.</p><p>And here is another.</p> 

.. và biến nó thành (chú ý không gian)

<p> Hey this is a paragraph. </p> <p> And here is another. </p> 



Đây là ý tưởng ban đầu của tôi (sai) là:

sed 's/<{1}|>{1}/ <> /' ... 


Nó khớp với toàn bộ từ/dòng, không mong muốn và cũng không thay thế chính xác.

Anyways, mọi trợ giúp sẽ được đánh giá cao! Cảm ơn!

+1

Bạn _really_ không muốn phân tích cú pháp HTML với biểu thức thông thường. Sử dụng trình phân tích cú pháp HTML. (xem http://stackoverflow.com/a/1732454/ là một trong những câu trả lời được tán thành nhiều nhất về SO vì lý do chính đáng) – geoffspear

+0

@Wooble: trong khi tôi thường đồng ý với xác nhận của bạn, việc sử dụng các regex vẫn có thể được chấp nhận để kiểm tra và giống như ... nếu nó vượt quá mức này, hãy sử dụng một trình phân tích cú pháp thích hợp. – 0xC0000022L

+0

Haha yeah, tôi biết. Tôi đã thấy cái đó. Tôi đang viết một định dạng HTML học thuật đồ chơi trong perl cho một tập hợp con rất nhỏ của các thẻ. Tôi chỉ sử dụng sed và regex để đảm bảo nó có khoảng trống mà mã perl của tôi cần. – jiman

Trả lời

5

Hãy thử hai thay thế để làm cho nó dễ dàng hơn:

sed 's/</ </g ; s/>/> /g' file 
+1

Tuyệt. Cảm ơn bạn. – jiman

+1

hoặc bạn có thể làm điều này - 'sed -e' s//&/g 'file' –