Các lệnh đường ống, sửa đổi stdin write thành stdout


8
echo Hello World | nano - | less

Tôi muốn sửa đổi Hello -> Tạm biệt khi đang trong trình soạn thảo văn bản.

Nó không phải là với nano. Tôi bị mắc kẹt với việc đọc nano stdin nhưng yêu cầu tôi ghi vào một tệp (ghi vào - tạo một tệp có tên -)



@slm, tôi nghĩ sẽ hợp lý hơn khi đóng Q khác như một bản sao của điều này vì đây là trường hợp rộng hơn.
Graeme

@Graeme - Tôi có xu hướng đồng ý với bạn nhưng người khác cũng có câu trả lời của bạn, mặc dù không được viết tốt. Một số sáp nhập có thể thích hợp hơn. Có lẽ chúng ta nên tranh thủ sự giúp đỡ của một mod để giúp với 2 người này? Tôi sẽ ping một cái về nó.
slm

@slm, tôi nghĩ chúng ta có thể để nó cho bất cứ ai đang trải qua hàng đợi gần và để đám đông quyết định. Sự khác biệt chính như tôi thấy đó là Q khác là trường hợp đặc biệt của điều này khi bạn chỉ muốn một đầu của đường ống.
Graeme

1
@Graeme - nếu chúng ta không chọn máy bơm trên đó thì ppl có thể sẽ đóng cái mới hơn cũ hơn dưới dạng bản sao.
slm

Câu trả lời:


11

Các moreutils gói có một lệnh lớn để làm điều này, được gọi là vipe. Từ trang người đàn ông:

SYNOPSIS
       command1 | vipe | command2

DESCRIPTION
       vipe allows you to run your editor in the middle of a unix pipeline and
       edit the data that is being piped between programs. Your editor will have
       the full data being piped from command1 loaded into it, and when you close
       it, that data will be piped into command2.

Theo mặc định, điều này sẽ sử dụng editorlệnh, thường chỉ là một liên kết tượng trưng đến trình soạn thảo dòng lệnh mặc định. Bạn có thể thay đổi điều này bằng cách thay đổi liên kết (sử dụng update-alternativestrên các hệ thống dựa trên Debian) hoặc sử dụng EDITORbiến môi trường. Ví dụ, bạn có thể làm:

echo Hello World | EDITOR=nano vipe | less

Mặt khác, nếu trình soạn thảo văn bản cụ thể không hỗ trợ cho loại điều này, tôi nghĩ rằng bạn bị mắc kẹt với việc tạo thủ công một tệp tạm thời, ghi tệp vào đó, chạy trình chỉnh sửa, đưa tệp vào phần còn lại của đường ống và xóa tập tin tạm thời. Các vipelệnh cơ bản sẽ chăm sóc của tất cả điều này. Điều này là tốt, nhưng lệnh hiếm khi có sẵn theo mặc định.


1

Trình soạn thảo văn bản joe (còn gọi là Trình soạn thảo riêng của Joe ) làm những gì bạn muốn.

Lệnh này echo "hello world" | joe - | lesshoạt động như mong đợi, mặc dù nó cần dấu ngoặc kép vì một số lý do.

Một số lệnh (như gpg) tạo ra đầu ra được hiển thị mà không đi vào đường ống. Điều này làm hỏng màn hình ban đầu bên trong joe, nhưng nhấn ctrl + r - refresh - sẽ dọn sạch mọi thứ.


1

Nếu tất cả những gì bạn muốn là thay thế "Xin chào" bằng "Tạm biệt" (hoặc bất kỳ thay thế từ nào khác), bạn có thể tránh chỉnh sửa thủ công trong trình chỉnh sửa có lợi cho công cụ tìm kiếm & thay thế tự động. Ví dụ: "sed" có thể thực hiện các thay thế như thế này:

echo Hello World | sed 's/Hello/Goodbye/' | less

Kiểm tra "man sed" để biết thêm chi tiết.

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.