2011-11-20 32 views
9

Trong bash tôi đang cố gắng thu thập kết quả grep của tôi trong mảng, mỗi ô giữ mỗi dòng. Tôi downloaing url với dòng nàybash grep kết quả thành mảng

wget -O index -E $ CURRENTURL

và sau đó tôi muốn grep 'index' kết quả tập tin (url khác) vào mảng mỗi dòng mỗi ô, cú pháp chính xác là gì?

Array = (grep "some expression" index)

??

+0

Đây là nơi bạn cần phải tìm các liên kết, có đúng không? Vậy các liên kết sẽ ở đâu? Thật khó để tạo ra một Regex toàn diện cho các URL. – beta0x64

Trả lời

8
readarray GREPPED < <(grep "some expression" index) 
for item in "${GREPPED[@]}" 
do 
    # echo 
    echo "${item}" 
done 

Oh, và kết hợp những -v greps như vậy:

egrep -v '\.(jpg|gif|xml|zip|asp|php|pdf|rar|cgi|html?)' 
+0

cảm ơn, tôi sẽ cải thiện mã của tôi với điều đó, khối mã đầu tiên bạn viết cho tôi đang làm gì? đọc từ mảng đó hoặc dòng đầu tiên cũng đặt vào mảng? –

+0

Dòng đầu tiên đầu ra cho mảng: http://www.gnu.org/s/bash/manual/html_node/Bash-Builtins.html; 4 dòng khác chỉ giới thiệu làm thế nào để (khoảng trắng an toàn) lặp qua chúng – sehe

+0

Lưu ý rằng 'readarray' là một bổ sung rất mới đối với Bash. Nó có sẵn trên hầu như không có máy chủ Linux, hoặc thậm chí Cygwin và Mingw cài đặt nơi tôi làm việc. Nếu bạn muốn có giải pháp di động, hãy xem bài đăng 'Có lẽ là hầu hết ...' của tôi bên dưới. – Blaine

3

Có lẽ thanh lịch nhất trong số một số lựa chọn thay thế kém sẽ là sử dụng tệp tạm thời.

wget $blah | grep 'whatever' > $TMPFILE 
declare -a arr 
declare -i i=0 
while read; do 
    arr[$i]="$REPLY" 
    ((i = i + 1)) 
done < $TMPFILE 

Tôi không có thời gian để giải thích lý do, nhưng không được đọc trực tiếp.

Không vỏ Unix là công cụ thích hợp cho tác vụ này. Perl, Groovy, Java, Python ... rất nhiều ngôn ngữ có thể xử lý một cách trang nhã, nhưng không có vỏ Unix nào.

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