2010-02-11 19 views
8

lấy ví dụ:Làm thế nào để loại bỏ các tên tập tin từ cuối năm sản lượng du -h

$ du -h file_size.txt 
112K file_size.txt 

Làm thế nào tôi sẽ loại bỏ các tên tập tin từ đầu ra của du -h

Tôi đã cố gắng sử dụng sed để tìm kiếm một chuỗi (tên tập tin) và thay thế bằng gì, nhưng nó has not làm việc (lệnh dưới đây)

du -h file_size.txt | sed 's/ 'file_size.txt'//' 

có thể ai đó xin vui lòng chỉ ra lý do tại sao công việc này wont, hoặc có lẽ là một cách tốt hơn để làm điều đó?

Trân

Paul

Trả lời

11

Bạn có một số xấu trích dẫn trong dòng lệnh. Cách đơn giản nhất có lẽ là:

du -h file_size.txt | cut -f -1 

Để khắc phục dòng lệnh của bạn:

du -h file_size.txt | sed 's/file_size.txt//' 

Kể từ bài viết của bạn có một thẻ awk:

du -h file_size.txt | awk '{ print $1 }' 
+2

hoặc 'du -h file_size.txt | sed 's/\ s +. * //' ' – Tomalak

+0

@Tomalak có ý tưởng đúng cho việc sử dụng' sed' - chắc chắn nhịp đập gõ tên tệp hai lần. –

+0

Woops, các dấu nháy đơn trong đó phần còn lại của tôi có $ VARIABLE trong đó trước đó. Cảm ơn sự giúp đỡ như mọi khi – paultop6

5

đầu ra đơn giản cột đầu tiên. Dưới đây là giải pháp awk

du -h test.txt | awk '{ print $1 }' 
+0

+++ 1 :-) aus .at – Flavius

0

Đây là tiết hơn một chút, nhưng trong mọi trường hợp, đây là một cách khác với những gì bạn muốn:

du -h file_size.txt |while read x junk; do echo $x; done 
0

@OP nếu dữ liệu của bạn có các trường riêng biệt, cho ví dụ khoảng trống/tab, sau đó dễ dàng hơn để sử dụng các công cụ như awk/cut để phân chia chúng trên các trường đó bằng dấu phân tách. Sử dụng regex (ví dụ sed) là không cần thiết. Thậm chí tốt hơn là chỉ sử dụng vỏ.

nhiều cách khác nhau

$ du -h file | awk '{print $1}' 
4.0K 

$ du -h file | cut -f1 
4.0K 

$ set -- $(du -h file) #using shell only 
$ echo $1 
4.0K 
0

lệnh ban đầu của bạn sẽ làm việc ngoại trừ việc bạn được bao gồm một không gian trong regexp sed, và du đầu ra tab.

0

đầu ra của du -h là [tab] được phân tách.

du -h file_size.txt |sed 's/[\t].*//g' 
Các vấn đề liên quan