1. Cắt thành 1 biến
Thử cái này:
foo1=$(curl https://domain.com/file.xml | grep -E "string1|string2")
Điều này sẽ chạy curl
1 lần và grep cho các lần xuất hiện của string1
hoặc string2
.
2. Cắt thành 2 biến
Nếu chúng là các biến khác nhau thì thay đổi chiến thuật một chút. Nắm bắt đầu ra curl
và sau grep
đó.
output=$(curl https://domain.com/file.xml)
foo1=$(echo "$output" | grep "string1")
foo2=$(echo "$output" | grep "string2")
3. Cắt thành một mảng
Bạn cũng có thể lưu trữ kết quả trong một mảng thay vì các biến riêng biệt.
output=$(curl https://domain.com/file.xml)
readarray foo < <(echo "$output" | grep "string1|string2")
Đây là một mẹo nhỏ để xử lý nếu kết quả của bạn từ grep có thể không trả về kết quả, vì kết quả từ "chuỗi2" có thể là mục đầu tiên hoặc thứ hai trong mảng, nhưng tôi cung cấp nó ở đây chỉ như một minh chứng Tiếp cận.
4. Đọc vào vars từ grep
Một phương thức khác sử dụng read
lệnh cùng với quá trình thay thế ( <( ..cmd..)
).
$ read -d"\n" foo1 foo2 \
<(curl https://domain.com/file.xml | grep -E "string1|string2")
Điều này một lần nữa có thể khó khăn nếu tìm kiếm "chuỗi1" không trả về kết quả nào, khiến bất kỳ kết quả khớp nào cho "chuỗi2" hiển thị $foo1
. Ngoài ra, cách tiếp cận này có xu hướng ít di động hơn so với # 2 hoặc # 3 ở trên.