Chuyển hướng một đầu ra đến một tệp từ lệnh grep đường ống


9

Tôi đang chạy này:

cat /dev/urandom|hexdump| grep -i "ffff f" > random

và tôi không nhận được gì trong tập tin random, nó vẫn giữ nguyên độ dài sau khi lệnh bị gián đoạn.

Làm thế nào để làm cho nó viết đầu ra vào một tập tin?

Tôi cần ghi kết quả vào một tệp chứa dữ liệu đầu ra như thế này:

021bc40 7724 d4f5 59ec bcbb ffff fd26 ab3c 9b7c

03a9100 b3a5 8601 fa33 ffff f23c 4326 2e7f 0c8a

0449810 e459 d5af 4e11 ffff fc55 8660 9efb 3c9b

nhập mô tả hình ảnh ở đây

Câu trả lời:


13

Sử dụng --line-bufferedtùy chọn cho grep(và cũng loại bỏ những thứ vô dụng cat):

hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random

Bằng cách này, đầu ra không được đệm nhưng mỗi dòng đưa vào randomngay lập tức. Tôi cũng khuyên bạn nên sử dụng teetrong đường ống của bạn để xem có bao nhiêu dòng đã được sản xuất:

hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random

3

Tệp của bạn trống vì quá trình bị gián đoạn trước khi tệp được ghi vào đĩa. Đó là cách chuyển hướng hoạt động. Như một cách giải quyết, hãy thử điều này:

script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random

Điều này về cơ bản sẽ ghi tất cả đầu ra màn hình vào tập tin.


Nó liên quan đến một lệnh nữa, nhưng được giao. Cảm ơn bạn.
Ruslan Gerasimov

3

cat /dev/urandom|hexdumphoặc hexdump /dev/urandomghi liên tục vào thiết bị xuất chuẩn và nếu bạn nhấn Ctrl+ Csẽ không có gì được thực hiện sau này. Nhưng bạn có thể giới hạn đầu ra vớihead

hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random  

điều này sẽ greptrong 1000000 dòng đầu tiên của đầu ra và ghi kết quả vào một tệp.


Tham gia thêm một lệnh, nhưng đã cho một kết quả tốt. Cảm ơn bạn.
Ruslan Gerasimov

1

Bạn sẽ cần ghi đầu ra của cat /dev/urandom | hexdumpmột tệp trước khi bạn thực hiện nó vào lần tiếp theo. Kịch bản dưới đây sẽ thực hiện những gì bạn đang cố gắng:

cat /dev/urandom | hexdump |
  while IFS= read -r line; do
    printf '%s\n' "$line" >> random;
  done

IFS được sử dụng để phân chia đầu ra thành các dòng ở đây.


(Nguồn)


grep "ffff f"đã bỏ lỡ
Ruslan Gerasimov
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.