Làm thế nào để tôi đưa một danh sách các số từ vỏ vào một lệnh?


4

Làm thế nào để tôi đưa một danh sách các số từ vỏ vào một lệnh? Để làm cho một cái gì đó như thế này

[1,2,3,4] | sort

sẽ cho

1
2
3 
4

CHỈNH SỬA:

Đáp lại câu trả lời vui lòng đăng cho đến nay. . . Tôi hỏi điều này, vì tôi muốn nhanh chóng kiểm tra và gỡ lỗi một ứng dụng bảng điều khiển có nhiều số khi nó nhập mà không phải nhập nhiều giá trị riêng lẻ theo sau là trả về vận chuyển. Tôi muốn chỉ cần gõ vào 'một lớp lót' và nhấn mũi tên lên ngay bây giờ và sau đó để phát lại lệnh. Lý tưởng nhất là tôi muốn làm điều này mà không cần sử dụng tệp văn bản chứa các giá trị (rõ ràng đây sẽ là cách đơn giản nhất để làm điều này.)

Câu trả lời:


4

Tôi giả sử chúng ta đang sử dụng các số có một chữ số - trong trường hợp đó echo 1 2 4 3 | grep -o [1234567890]|sort nên để lừa. Tôi nghĩ rằng bạn phải điều chỉnh regex cho grep nếu đó là số có nhiều chữ số.

grep -o chọn theo regex và in nó trên mỗi dòng

chỉnh sửa: và một giải pháp thậm chí thanh lịch hơn.

chúng tôi vẫn sử dụng echo, nhưng với tr. Điều này hoạt động với các số lớn hơn một chữ số

echo 10,2,4,3|tr ',' '\n'|sort -g

tr đang được yêu cầu thay thế dấu phẩy bằng dòng mới và sắp xếp -g sắp xếp theo thứ tự số (giả sử đó là những gì bạn muốn sắp xếp).

Giả sử bạn nhu cầu dấu ngoặc vuông trong danh sách vì một số lý do kỳ lạ, bạn có thể xóa nó bằng

echo [10,2,4,3]|tr '[:punct:]' ' '|tr ' ' '\n'|sort -g

Lệnh tr bổ sung thay thế bất kỳ dấu câu nào bằng dấu cách.


Ví dụ cuối cùng của bạn không hoạt động. Đầu tiên tr '[:punct:]' ' ' biến bất kỳ dấu phẩy nào thành khoảng trắng trước dấu hai tr ',' '\n' sẽ không bao giờ nhìn thấy chúng.
Nicole Hamilton

Tôi nghĩ đã sửa - gần như, bây giờ tôi có hai khoảng trắng ở phía trước ... Các dấu ngoặc vuông dường như làm cho nó hơi khó
Journeyman Geek

Thử tr -d '[]' | tr ',' '\n'.
Nicole Hamilton

5

Bạn có thể sử dụng tài liệu "ở đây" bằng cách sử dụng << toán tử chuyển hướng i / o trong dòng. Shell tìm kiếm bất kỳ mã thông báo nào bạn cung cấp (trong ví dụ này, eof ) làm điểm đánh dấu cuối tệp cho tài liệu ở đây.

sort << eof
1
2
3
4
eof

Một cách khác là lặp lại các giá trị, echo ing chúng thành sắp xếp:

for i in 1 2 3 4; do echo $i; done | sort

Nếu bạn thích for vòng lặp đóng gói như một lệnh, sử dụng một thủ tục:

list() for i in $*; do echo $i; done
list 1 2 3 4 | sort

3
$ printf '%d\n' 1 3 2 4 | sort
1
2
3
4

hoặc là

$ echo $'1\n2\n4\n3' | sort
1
2
3
4

Ở một số tiểu bang, câu trả lời thứ hai hoạt động tốt hơn mà không cần $. Tôi đã nhận được echo '1\n2\n4\n3' để cung cấp đầu ra mà bạn hiển thị cho echo $'1\n2\n4\n3', trong khi echo $'1\n2\n4\n3' đầu ra của chính nó $1, 2, 43 (trên các dòng riêng biệt).
Scott

2

Bạn có thể sử dụng mèo

cat | sort 
1
2
4
3
^d (end of input)

Ngoại trừ việc chậm hơn, điều này không khác gì sort Tất cả dựa vào nó.
Nicole Hamilton

@Nicole: OP giải thích trong một chỉnh sửa rằng sort là một phép ẩn dụ cho một số chương trình khác, chưa xác định có thể đang kiểm tra đầu vào tiêu chuẩn của nó để xem liệu nó là một tty, tập tin, đường ống, hoặc bất cứ điều gì.
Scott

@Scott Và nó khác với sort như một phép ẩn dụ cho một cái gì đó khác, nhưng vẫn tự nó. Các cat | không thêm gì.
Nicole Hamilton

@Nicole: Quan điểm của tôi là, nếu bạn gõ umptyfratz và sau đó nhập một số đầu vào (kết thúc bằng Ctrl + D), sau đó nhập cat | umptyfratz theo cùng một đầu vào, bạn có thể có hai hành vi khác nhau. Bạn nói, đây không phải là khác nhau
Scott

1
@Scott, tôi đã phát hành trước bash và, không, người dùng của tôi vẫn ổn. Ống nhanh hơn nhiều nhưng tôi nhận ra sau nhận xét của mình rằng tôi có thể sử dụng chúng với giá rẻ vì tôi đa luồng; bash không phải và sẽ phải ngã ba để nuôi đường ống. Nhưng hãy di chuyển cái này nhé. Gửi mail cho tôi tại hamiltonlabs.com. Nếu bạn chạy Windows, tôi sẽ cung cấp cho bạn một bản sao miễn phí công việc của tôi và chúng tôi có thể nói về những gì tôi đã làm.
Nicole Hamilton

2

Câu trả lời siêu đơn giản của người Viking: nhập lệnh và sau đó nhập dữ liệu vào. (Nói đúng ra, đây không phải là đường ống Ctrl + D . Ví dụ:

(lời nhắc) & gt; sort –f
Các
nhanh chóng
nâu
cáo

Ctrl + D
nâu
cáo
nhanh chóng
Các

(lời nhắc) & gt;

Các Ctrl + D có thể lặp lại như ^Dvà dòng đầu tiên của đầu ra có thể xuất hiện trên cùng một dòng như sau:

^Dbrown
fox
quick
The
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.