Làm thế nào để tôi chỉ lấy lại dòng cần thiết từ đầu ra thiết bị đầu cuối?


16

Tôi chỉ muốn nhận dòng df -hđầu ra thứ ba .

Tôi nên sử dụng loại lệnh nào?


16
Lưu ý cho tương lai: câu hỏi này rất rất rất cơ bản. Nó thường được khuyến khích thể hiện nỗ lực nhất định và những gì bạn đã thử trước khi hỏi.
Sergiy Kolodyazhnyy

Mặc dù có thể hợp pháp để có được dòng thứ 3 của tệp có định dạng tĩnh được cho là khác, nhưng nó khác với dòng thứ 3 của chương trình chẩn đoán với đầu ra khác nhau tùy thuộc vào trạng thái của hệ thống. Ví dụ, gắn một ổ đĩa / phân vùng mới theo thứ tự bảng chữ cái trước khi dòng thứ 3 hiện tại của bạn thổi nó. Do đó, câu trả lời của @ Random832 dưới đây là tốt nhất.
MarkHu

Câu trả lời:


31

Điều này sẽ xuất ra dòng thứ 3, bất kể nội dung.

df -h | sed -n 3p

+1 cho câu trả lời nhỏ nhất : df -h|sed -n 3p.
EKons

16

Các dflệnh thực sự chấp nhận một cuộc tranh cãi việc xác định hệ thống tập tin mà bạn muốn. Vì vậy, bạn có thể sử dụng, ví dụ, df /homehoặc df /dev/sda3.

Nếu bạn định phân tích đầu ra cho một tập lệnh, bạn sẽ muốn sử dụng df -Pđể đảm bảo nó không bao giờ kết thúc thành nhiều dòng. Vì vậy, ví dụ, bạn có thể sử dụng df -Ph /home | tail -n +2(nhưng nếu bạn phân tích cú pháp đầu ra cho tập lệnh, hãy lưu ý đến khả năng tên tệp có khoảng trắng trong chúng)


2
Đó là nó! Thay vì phân tích cú pháp đầu ra, hãy sử dụng lệnh để chỉ cung cấp những gì bạn muốn.
fedorqui

1
Nhưng OP cho biết ông muốn dòng 3. df /homecung cấp một tiêu đề. Bạn đang diễn giải mục đích của người dùng. Bạn có thể đúng. Bạn có thể sai, ai biết?
Mike S

@MikeS Một tá câu trả lời khác đã được đưa vào dòng 3 không có ngữ cảnh. Tôi đã cung cấp thêm thông tin để OP sẽ có nó nếu nó hữu ích cho anh ta. Và tail -n +2loại bỏ tiêu đề.
Random832

14

Bạn có thể sử dụng kết hợp headtail:

df -h | head -3 | tail -1

Hoặc là

df -h | tail -n +3 | head -1

Nhưng lưu ý rằng, dfcho phép lọc đầu ra từ các tùy chọn của dfchính nó, bạn nên xem xét những cái đó trước khi sử dụng bất kỳ lệnh bên ngoài nào.

Kiểm tra man df.


4
+1 để đề cập rằng df có thể lọc các mục cụ thể
Sergiy Kolodyazhnyy

2
Thật vậy, hầu như luôn luôn tốt hơn để tự lọc dữ liệu trước khi chuyển sang các chương trình bên ngoài.
Zach Mertes

10

Awk là công cụ xử lý văn bản, vì vậy nó phù hợp cho nhiệm vụ này

df -h | awk 'NR == 3'

6

Tôi giả sử bạn không nhất thiết phải tìm kiếm dòng thứ ba, nhưng đối với dòng có đề cập đến một đĩa cụ thể (ví dụ /dev/sda3) hoặc một điểm gắn kết cụ thể (ví dụ /home).

Vì vậy, thay vì chỉ hiển thị dòng thứ ba, không an toàn vì thứ tự đầu ra có thể thay đổi và bạn có thể nhận được kết quả khác, bạn có thể lọc đầu ra theo nội dung và chỉ hiển thị các dòng khớp với một mẫu cụ thể hoặc chứa từ khóa.

Công cụ của bạn cho việc này là grep.

Ví dụ: nếu bạn muốn dòng về thiết bị /dev/sda3, bạn gõ:

df -h | grep '/dev/sda3'

Nếu bạn muốn dòng đề cập đến thư mục chính của bạn là điểm gắn kết, hãy sử dụng:

df -h | grep '/home'

3
Hoặc df -h /dev/sda3hoặc df -h /home(cái sau hoạt động ngay cả khi nó không phải là điểm gắn kết).
Random832

6

Bạn cũng có thể sử dụng perl:

df -h | perl -ne 'print if $.==3' 

Số $.dòng hiện tại, vì vậy bạn có thể in dòng thứ N bằng perl -ne 'print if $.==N'.


1
Đây là lý do tại sao Perl vẫn có liên quan trong quan điểm của tôi. Nó kết hợp sed và awk với một ngôn ngữ lập trình có cấu trúc mà (trong khi nhiều người sẽ nói là thực sự xấu xí [và tôi có thể đồng ý]) ít nhất là phù hợp và rất hữu ích cho những lớp lót ngắn này. Cảm ơn terdon. Điều này gần như cô đọng như ví dụ sed, nếu dài dòng hơn một chút.
Mike S

@MikeS rất vui khi được giúp đỡ. Tuy nhiên, là một hacker Perl, tôi phải chỉ ra rằng mã Perl chỉ xấu như bạn tạo ra. Các lập trình viên giỏi có thể viết mã đẹp bằng Perl, chỉ là ngôn ngữ không bắt buộc bạn và điều đó thật dễ dàng.
terdon

2

Ý tưởng đầu tiên của tôi sẽ là một cái đầu-đuôi-xây dựng.

Thí dụ:

df -h | head -3 | tail -1

head -3 làm cho đầu ra dừng lại sau ba dòng và tail -1 sẽ chỉ xuất ra dòng cuối cùng.

Ngoài ra, nếu bạn biết, đầu ra sẽ trông như thế nào, bạn cũng có thể sử dụng grepđể tìm các dòng có chứa một chuỗi nhất định.

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.