Làm thế nào để phân tích đường ống với nhiều lệnh độc lập?


2

Làm thế nào tôi có thể phân tích đầu ra của một lệnh bằng nhiều lệnh mà không cắt ngắn ở mỗi bước?

Ví dụ ls -al|grep -i something sẽ chuyển mọi dòng có "cái gì đó" trong ống tiếp theo, điều đó cũng tốt, nhưng điều đó cũng có nghĩa là mọi dòng khác trong ống đều bị loại bỏ vì không phù hợp với điều kiện. Điều tôi muốn là có thể hoạt động trên một ống đơn bằng nhiều lệnh độc lập.

Trong trường hợp này, một đường ống từ Mutt vượt qua toàn bộ nội dung thư. Tôi muốn nhận grep, sed, xóa và gán từng cái cho các biến bash.

Ban đầu, điều tôi muốn là có thể gán "id tin nhắn" cho một biến, "chủ đề" cho một biến khác, v.v. Sau đó chuyển chúng vào các đối số lệnh thích hợp.

Đây là cách nó sẽ được

MessageBodyFromMutt|grep something -Ax -Bx |grep another thing from the original message| sed some stuff from the original message| cut from here to there

Rõ ràng dòng trên không làm những gì tôi muốn.

Tôi muốn tất cả các lệnh này hoạt động trên cơ thể thông điệp ban đầu. Tôi hy vọng nó có ý nghĩa


Thử tee. Nó rèn các đường ống của bạn (mặc dù không phải các biến).
choroba

Choraba, cảm ơn. Có vẻ như đó là những gì tôi cần nhưng Mutt không thích dấu ngoặc đơn xung quanh các lệnh theo tee. Tôi đã thử nghiệm một số chuỗi và chúng hoạt động trong bash nhưng Mutt pipe đang phàn nàn về những vấn đề như vậy. Có khuyến nghị nào không?
yarun can

Mutt có lẽ đang chạy sh, không phải bash. Bạn có thể cấu hình nó để chạy bash? Hoặc chạy bash -c '...'.
choroba

@choroba ok đó là làm việc. Đây là những gì tôi đang cố gắng làm. Vì vậy, tôi có một lệnh được gọi là "tác vụ thêm + người gửi email + từ" đây là cách tôi đang cố gắng tách ra. "+" là các thẻ trong chiến binh. Bạn có cảm thấy như Tee có thể để tôi làm điều đó không? Tôi đã nghĩ rằng tôi có thể gán chúng cho shell vairbales nhưng điều đó dường như không xảy ra với tee.
yarun can

Nếu bạn muốn grep bản gốc và sed bản gốc .. Tại sao bạn không làm nhiều dòng như bản gốc mèo | grep & lt; ENTER & gt; mèo gốc | quyến rũ & lt; ENTER & gt; ví dụ Sẽ rõ ràng hơn nếu bạn đưa ra ví dụ về dữ liệu bạn bắt đầu và dữ liệu bạn muốn ở cuối thông qua grep và sed.
barlop

Câu trả lời:


2

Bạn có thể lưu đầu ra vào một tệp tạm thời và sử dụng tệp đó làm đầu vào cho các lệnh riêng lẻ.
Nếu các lệnh không có đầu ra, bạn có thể sử dụng tee với bash thay thế quá trình; nó sẽ trông giống như

MessageBodyFromMutt | tee >( command1 ) >( command2 ) >( command3 )

Nhưng vì bạn có đầu ra, sẽ được trộn lẫn với nhau, nó không giúp ích gì ở đây - ngoại trừ nếu bạn thay đổi các lệnh để lưu đầu ra vào các tệp.

Nếu bạn không thể tạo một tệp tạm thời, bạn có thể lưu kết quả đầu ra mà bạn muốn xử lý nhiều lần trong một biến, và sau đó echo nó nhiều lần:

messageBody="$( MessageBodyFromMutt )"
echo "$messageBody" | command1
echo "$messageBody" | command2
echo "$messageBody" | command3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.