Ưu điểm của tập tin cat'ing và đường ống đến grep


19

Có bất kỳ lợi thế bổ sung nào của việc tạo một tệp và chuyển nó sang grep, bên cạnh sự tiện lợi không? Sự tiện lợi là, khi tôi truy xuất các lệnh như những lệnh bên dưới từ lịch sử của mình, con trỏ nằm ở cuối dòng, do đó rất dễ sửa đổi lệnh với văn bản khác để grep trên cùng một tệp.

Vì vậy, những lợi thế khác có thể có để quy ước sau đây:

cat /var/tmp/trace.2043925204.xt | grep -in profile
cat /var/tmp/trace.2043925204.xt | grep -n Profile-Main

thay vì:

grep -in profile /var/tmp/trace.2043925204.xt 
grep -n Profile-Main /var/tmp/trace.2043925204.xt 

Câu trả lời:


21

Tốt hơn để tránh mèo; viết theo cách này nếu vấn đề chỉnh sửa dòng:

$ < filename grep pattern

Lý do là việc đẩy tất cả dữ liệu thông qua con mèo tốn chi phí bộ nhớ và tài nguyên CPU. Một lợi ích khác của việc truyền tên tệp dưới dạng đối số thay vì chuyển hướng stdin là nó cho phép lệnh tùy chọn mmap () tệp.


9

Tôi không thể tin rằng không ai đã tham khảo "Sử dụng mèo vô dụng" http://www.smallo.ruhr.de/award.html chưa

Có một lợi thế đáng ngờ. Nếu bạn có một đường ống dài, nó trông có vẻ trực giao hơn một chút với con mèo:

cat file | command1 | command 2 | command3

Nó cụm tất cả các lệnh với nhau.

Tất nhiên như những người khác đã nói (và tôi làm)

< file command1 | command2 | command3

Thực hiện khá nhiều điều tương tự. Điều đó nói rằng, con mèo khá nhỏ và sẽ không làm hỏng máy tính của bạn nếu bạn sử dụng nó khi bạn không thực sự cần.

Thông thường sử dụng catvs trực tiếp nhấn một tệp không thay đổi bất cứ điều gì, nhưng nó sẽ tạo ra sự khác biệt cho các lệnh nhất định quan tâm nếu có nhiều tệp làm đối số, chẳng hạn như grep. Trường hợp tại điểm:

cat file1 file2 | grep SOMETHING

sẽ có đầu ra khác với

grep SOMETHING file1 file2

Mà sẽ có tên tệp phù hợp trong đầu ra. Có những lúc tôi không muốn tên tập tin và đó là một lợi thế khi sử dụng cat.


1
catđọc rõ ràng hơn nhiều <. Hoặc có lẽ chỉ cho chúng ta những người sương mù nghĩ rằng Unix và bash có thể học được rất nhiều điều từ VMS và DCL.
RonJohn 18/03/18

8

Không có lợi thế. Con trỏ của bạn ở cuối cũng không quan trọng lắm nếu bạn cấu trúc nó như thế này:< inputfile grep -args foo


6

Bạn chỉ đơn giản là không cần sử dụng mèo trong tình huống này. Điều này là không cần thiết và lãng phí thời gian, bởi vì các công cụ như grep lấy tên tệp làm đối số.

[root@un1xf00 root]# time cat passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.021s
user    0m0.000s
sys     0m0.030s
[root@un1xf00 root]# time grep root passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

real    0m0.002s
user    0m0.000s
sys     0m0.000s
[root@un1xf00 root]#

Cập nhật: Cảm ơn, @Andy Lester, vì đã chỉ ra rằng những thời gian này không đưa vào tài khoản bộ đệm đĩa. Tôi đã học được một cái gì đó mới! Nhưng tiết kiệm một phần của giây dù sao cũng không tạo ra nhiều sự khác biệt. Tôi chỉ nghĩ rằng việc đưa mèo vào grep không phải là cách làm việc hợp lý. Nó giống như nhờ người khác giúp bạn giải quyết vấn đề, khi bạn hoàn toàn có khả năng tự giải quyết.


1
@Michael: A -10 cho bạn vì sự khó hiểu. Bạn có thể đã hữu ích hơn. Thật tệ là bạn sẽ không thấy điều này vì bạn không có tài khoản ở đây.
Tạm dừng cho đến khi có thông báo mới.

4
Michael đang nói rằng thời gian trên không tính đến bộ đệm đĩa tài khoản. (và một -0,29 đến Dennis vì đã quan tâm nhiều hơn trong smacking xuống Michael hơn de-obtusing trả lời)
Andy Lester

1
Tôi cho rằng nếu phải có tiếng ồn hơn là báo hiệu các bình luận là nơi dành cho nó. Cảm ơn @Andy vì tôi không biết Michael đã đề cập đến bộ đệm đĩa.
George Jempty

3

Dễ chỉnh sửa là lợi thế thực sự duy nhất và nếu bạn đang thực hiện nó ở dòng lệnh, thì cần thêm thời gian để chạy catvà thực hiện đường ống sẽ không thực sự tạo ra sự khác biệt.

Không có lý do để làm điều đó trong một kịch bản shell, mặc dù.


2

Không có lợi ích nào cả. Thay vì lo lắng về việc sửa đổi các lệnh, hãy tìm hiểu cách điều hướng tốt hơn dòng lệnh shell của bạn bằng các phím tăng tốc và phím tắt.


1

Không và nó thậm chí có thể chậm hơn một chút trong ví dụ bạn đưa ra.

A pipeđược tạo giữa cat và grep, không cần thiết khi chuyển tên tệp trực tiếp đến grep. Tuy nhiên tôi không nghĩ trong bất kỳ trường hợp nào bạn sẽ quan sát các giới hạn thông lượng vì điều này.

Các ưu điểm khác của đầu vào đường ống đến grep bao gồm xử lý bổ sung trước, chẳng hạn như việc sử dụng các tiện ích với khả năng đọc tệp nâng cao hơn. (Xem tee, zcattrong số những người khác).

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.