2011-12-01 9 views
5

Đây là lệnh tôi đang sử dụng trên trang web chuẩn mà tôi muốn truy cập trực tuyến.unix tr tìm và thay thế

tr '<' '\n<' < index.html 

tuy nhiên nó cho tôi dòng mới, nhưng không thêm lại cà rốt. ví dụ:

echo "<hello><world>" | tr '<' '\n<' 

lợi nhuận

(blank line which is fine) 
hello> 
world> 

thay vì

(blank line or not) 
<hello> 
<world> 

Cảm ơn

Trả lời

12

Đó là bởi vì tr chỉ làm nhân vật cho ký tự thay thế (hoặc xóa).

Thay vào đó hãy thử sed.

echo '<hello><world>' | sed -e 's/</\n&/g' 

Hoặc awk.

echo '<hello><world>' | awk '{gsub(/</,"\n<",$0)}1' 

Hoặc perl.

echo '<hello><world>' | perl -pe 's/</\n</g' 

Hoặc ruby.

echo '<hello><world>' | ruby -pe '$_.gsub!(/</,"\n<")' 

Hoặc python.

echo '<hello><world>' \ 
| python -c 'for l in __import__("fileinput").input():print l.replace("<","\n<")' 
+0

Tôi cố gắng đó nhưng tôi nhận n n .Tôi không biết những gì sed newline ký tự là – Kamran224

+0

@ Kamran224 Điều này làm việc cho tôi nhưng thử: echo -e ' ' | sed -e 's/

+0

@ Kamran224 '\ n' là phần mở rộng GNU sed. Bạn đang sử dụng hệ thống nào? – ephemient

1

Tính năng này có phù hợp với bạn không?

awk -F"><" -v OFS=">\n<" '{print $1,$2}' 

[jaypal:~/Temp] echo "<hello><world>" | awk -F"><" -v OFS=">\n<" '{$1=$1}1'; 
<hello> 
<world> 

Bạn có thể đặt một regex// (dòng bạn muốn điều này xảy ra cho) ở phía trước của hành động awk{}.

+1

''{$ 1 = $ 1} 1'' ngắn hơn và sẽ hoạt động nếu có nhiều hơn'><'trên một dòng. – ephemient

+0

Thanks @ephemient Tôi đồng ý, Đã cập nhật câu trả lời của tôi. –

+0

Điều này sẽ thay thế ít ký tự '<' hơn trong câu hỏi. –

1

Nếu bạn có GNU grep, điều này có thể làm việc cho bạn:

grep -Po '<.*?>[^<]*' index.html 

mà nên đi qua tất cả các HTML, nhưng mỗi thẻ nên bắt đầu vào đầu dòng với văn bản không phải thẻ có thể sau trên cùng một dòng.

Nếu bạn muốn gì, nhưng thẻ:

grep -Po '<.*?>' index.html 

Bạn nên biết, tuy nhiên, đó là not a good idea để phân tích HTML với regexes.

1

Thứ tự của nơi bạn đặt dòng mới là quan trọng. Ngoài ra, bạn có thể thoát khỏi "<".

tr '\/<' '\/<\n' < index.html

`tr '<' '<\n' < index.html` works as well.