Tôi có cảm giác sed không được ngăn chặn, bởi vì khi tôi nói:Có phải ngăn chặn sed không?
iostat | sed
sed
quá trình dữ liệu khi nó đến, nhưng khi tôi làm
iostat | sed | netcat
Sau đó sed
khối netcat
.
Tôi có đúng không?
Tôi có cảm giác sed không được ngăn chặn, bởi vì khi tôi nói:Có phải ngăn chặn sed không?
iostat | sed
sed
quá trình dữ liệu khi nó đến, nhưng khi tôi làm
iostat | sed | netcat
Sau đó sed
khối netcat
.
Tôi có đúng không?
sed
sẽ hoạt động ở chế độ đệm khi không in tới thiết bị đầu cuối. Điều này có nghĩa là nó sẽ cố gắng lấp đầy bộ đệm bên trong của nó trước khi thực hiện bất kỳ quá trình xử lý và đầu ra nào theo mặc định.
Điều này được thực hiện để tăng thông lượng, vì thông thường trong một đường ống bạn không quan tâm đến thời gian, nhưng muốn càng nhiều dữ liệu được xử lý trong một thời gian nhất định càng tốt.
Chuyển -u
tới sed sẽ yêu cầu nó hoạt động không bị chặn, do đó làm việc giống như cách nó hoạt động khi đầu ra đi tới thiết bị đầu cuối.
Tôi không biết nếu tôi hiểu câu hỏi đúng, nhưng trong ví dụ của bạn, nó phải là như thế này:
Khác với điều đó, sed không cần phải đọc tất cả đầu vào của nó để tạo ra đầu ra.
Bạn có nhận thấy bất kỳ sự chậm trễ nào không thể giải thích được và một số đệm nhỏ không?
Ngoài những gì @saua nói, sed
ít nhất là dòng định hướng, rằng nó đọc một dòng, sau đó hoạt động trên nó để nó sẽ luôn luôn được đệm ít nhất một dòng. Ngoài ra, sed
có thể hoạt động ở chế độ nhiều dòng. Nếu bạn đang sử dụng mẫu nhiều dòng, thì sed
không thể xuất bộ đệm hiện tại của nó cho đến khi nó biết rằng mẫu không áp dụng hoặc mẫu đã được xử lý.
stdbuf
có thể hỗ trợ thay đổi hành vi lưu đệm của luồng io chuẩn. Bạn có thể thử này để thay đổi hành vi đệm:
... | stdbuf -oL -eL sed -e ... | ...
sed: Tùy chọn bất hợp pháp - u – CommaToast
@CommaToast: sau đó, hoặc sử dụng GNU sed hoặc tìm hiểu xem hương vị của bạn sed có một tùy chọn tương đương (và đăng nó ở đây như một câu trả lời, khi bạn làm). –
Trên bản MacOSX comp của tôi, '-u' bị thiếu, nhưng' -l' hoạt động cho việc đệm đường, được ưu tiên. – Umbrella