Tôi đang tập hợp một bài thuyết trình cho một đối tượng phi kỹ thuật. Tôi có một chương trình đang chạy trong bash tạo ra một luồng giá trị liên tục, một vài trong số đó là quan trọng. Tôi muốn làm nổi bật các kết quả quan trọng khi chúng được hiển thị để khán giả có thể biết được tần suất của chúng. Vấn đề là tôi không thể sed
hoạt động trên một luồng đang chạy. Nó hoạt động tốt nếu tôi đặt kết quả vào một tệp, như trong:
cat output.txt | sed "s/some text/some text bolded/"
Nhưng nếu tôi thử điều tương tự trên đầu ra đang chạy, như thế này:
command | sed "s/some text/some text bolded/"
sed
Không lam gi cả. Có suy nghĩ gì không?
Như Lambert đủ hữu ích để chỉ ra, câu nói của tôi sed
không có gì là mơ hồ. Điều đang xảy ra là chương trình xuất ra stdout
(tôi khá chắc chắn rằng nó không được ghi vào stderr
) như bình thường, ngay cả khi nó được chuyển qua sed
.
Vấn đề dường như là lệnh gọi một chương trình thứ hai, sau đó xuất ra thiết bị xuất chuẩn. Có một vài dòng được in bởi chương trình đầu tiên; những cái này tôi có thể chỉnh sửa. Sau đó, có một luồng các giá trị được in bởi chương trình thứ hai; những cái này tôi không thể chỉnh sửa.
Phương pháp Perl và awk cũng không hoạt động.
command|egrep 'some text|$'
g
thay thế "toàn cầu", nếu không, chỉ lần xuất hiện đầu tiên trên một dòng sẽ được thay thế:sed "s/old/new/g"
stdbuf -o0 command | sed "s/some text/some text bolded/"
hoạt động không?