2015-05-06 17 views
9

Tôi không có kinh nghiệm bash, chỉ muốn biết làm thế nào để bắt đầu.Bash: định dạng danh sách các yếu tố trong HTML

Tôi phải viết tập lệnh bash để định dạng đúng tài liệu XHTML. Ví dụ biến này:

<p>Perfect body</p><ol><li>Big boobs 
    </li><li> 
    Nice butt</li></ol> 

vào đây:

<p>Perfect body</p> 
<ol> 
    <li>Big boobs</li> 
    <li>Nice butt</li> 
</ol> 

Bây giờ tôi tin rằng tôi phải làm một cái gì đó như:

cat > format1 #create file 
#!bin/bash 
if tail of a line ends with "</A-a>": (like </li> or </ol> or </p> or </ul>) 
    add \n 
    fi 

if head of a line = <ol> or <ul> 
    add \n 
    fi 

Xin hãy giúp tôi hiểu nó. Đây là tất cả những gì tôi có thể nghĩ đến và tôi thực sự muốn biết cách giải quyết nó.

+1

1. Bạn không có điểm cho ví dụ về giới tính. Chỉ cần sử dụng bia. –

+1

2. Bash không phải là công cụ thích hợp ở đây. Làm điều đó trong python hoặc ruby, nhiều thư viện cho loại công việc –

+0

Nếu bạn thay thế 'big boobs' bằng' chest ấn tượng', bạn có thể loại bỏ tính chất sexist của câu hỏi :-) – paxdiablo

Trả lời

0

Tôi khuyên bạn nên xem tiện ích html-tidy.

Bạn không phải tự mình viết một trình định dạng, có rất nhiều tiện ích hiện có cho bạn, bỏ qua nó không phải là một nhiệm vụ tầm thường và "cách triển khai một trình định dạng html đẹp" sẽ là câu hỏi thực sự rộng rãi để hỏi (các câu hỏi rộng là chống lại các quy tắc StackOverflow).

1

Sử dụng html-tidy. Nó sẽ là một ý tưởng tốt để thêm video này vào .bashrc của bạn nếu bạn muốn sử dụng tidy

alias tidy="tidy -xml --indent auto --indent-spaces 1 --quiet yes -im" 

Lệnh trên sẽ tạo ra một alias cho gọn gàng mà nói với thụt nội dung tập tin xml (đảm bảo tất cả các thẻ đã đóng thẻ), thụt lề với một không gian duy nhất và sửa đổi tệp tại chỗ.

+0

Cảm ơn bạn đã trả lời, nhưng tôi thực sự muốn tự mình làm vì chúng tôi không được phép cài đặt cái gì đó (què). Tôi hiện đang sử dụng puTTy. –

0

HTML Tidy có thể đã được cài đặt trên hệ thống của bạn, nó dành cho tôi và tôi không bao giờ nhớ là đã cài đặt nó. Bạn có thể muốn kiểm tra bằng cách chạy -

man tidy 

nếu bạn nhận được hướng dẫn thì bạn đã sẵn sàng để phát triển!

tidy -options oldFile.xhtml -output newFile.xhtml 
0

Một cách khác để nhìn vào là xmllint, có thể được cài đặt trên hệ thống của bạn:

xmllint --format <input-file> 
1

Với các khó khăn mà các vấn đề phải được giải quyết với một kịch bản bash và bạn không thể sử dụng htmltidy, sau đó tôi muốn bắt đầu bằng cách tạo ra một htmltidy.sh tập tin có chứa:

#!/bin/bash 

echo $(cat)      |\ 
    sed 's/\s*\(<[^>]\+>\)\s*/\1/g' |\ 
    sed 's/></>\n</g'    |\ 
    awk '{ 
     if ($0 ~ /^<\/[^>]+>$/) indent=substr(indent,2); 
     print indent$0; 
     if ($0 ~ /^<[^\/>][^>]+>$/) indent=indent" "; 
    }' 

Để sử dụng chương trình này bạn sẽ ống nội dung vào nó như thế này:

cat sexist.html | ./xhtmltidy.sh 

Điều này ít nhất sẽ thực hiện thủ thuật cho đầu vào mẫu mà bạn đã cung cấp.

Một số giải thích:

  • mèo chụp tất cả các thiết bị nhập chuẩn như một dòng văn bản
  • dải sed ở đầu và đuôi không gian cho thẻ XHTML
  • sed đặt một dòng mới giữa các thẻ XHTML liền kề
  • awk giảm thụt lề nếu một dòng là thẻ XHTML kết thúc (chẳng hạn như)
  • awk in dòng có thụt dòng
  • awk inc cho thuê nếu một dòng là một thẻ XHTML bắt đầu (chẳng hạn như )

Chương trình đồ chơi này sẽ phá vỡ rất nhanh ngay khi độ phức tạp của đầu vào trở nên phức tạp hơn. Nhưng điều đó sẽ cung cấp cho bạn một số ý tưởng tại sao nó tốt hơn để sử dụng một tiện ích kệ hơn là viết của riêng bạn.

Các vấn đề liên quan