2013-03-15 17 views
12

Tôi có một tệp chứa nhiều dòng và tôi chỉ muốn hiển thị từ đầu tiên của mỗi dòng với các lệnh Linux.Làm thế nào để hiển thị từ đầu tiên của mỗi dòng trong tệp của tôi bằng cách sử dụng các lệnh linux?

Tôi có thể làm như thế nào?

+0

có thể trùng lặp của [Chỉ in trường đầu tiên trong chuỗi] (http://stackoverflow.com/questions/15024561/printing-only-the-first-field-in-a-string) –

+5

Nó được hỏi một triệu lần, có thể được thực hiện một cách hàng triệu. Hãy thử tìm kiếm lần sau. Bỏ phiếu để đóng. –

+3

Tôi chắc chắn có các bản sao, nhưng tôi không nghĩ rằng bản được đề xuất phù hợp. –

Trả lời

23

Hãy thử làm điều này bằng :

grep -Eo '^[^ ]+' file 
+1

cảm ơn bạn nó hoạt động – MOHAMED

25

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

awk '{print $1}' your_file 

này sẽ "in" cột đầu tiên ($1) trong your_file.

+0

bài chỉnh sửa, tại sao đưa ra giải pháp sai khi bạn đưa ra giải pháp tốt nhất cùng một lúc? Đó là việc sử dụng mèo vô dụng: http://partmaps.org/era/unix/award.html#cat –

+0

Ông đã chỉ định 'cat' trong câu hỏi của mình; figured tôi ít nhất là cho thấy làm thế nào để sử dụng nó trong một lệnh đường ống (nhưng tôi đã đề cập đến nó là quá mức cần thiết cho mục đích này = P). – newfurniturey

3

tôi thấy đã có câu trả lời. Nhưng bạn cũng có thể làm điều này với sed:

sed 's/ .*//' fileName 
6

thử làm điều này với coreutils cut:

cut -d' ' -f1 file 
1

Các giải pháp trên dường như để phù hợp với trường hợp cụ thể của bạn. Đối với một ứng dụng tổng quát hơn về câu hỏi của bạn, hãy xem xét các từ đó thường được định nghĩa là được phân tách bằng khoảng trắng, nhưng không nhất thiết phải là ký tự khoảng trắng. Các cột trong tệp của bạn có thể được phân tách bằng tab, ví dụ hoặc thậm chí được phân cách bằng hỗn hợp các tab và dấu cách.

Ví dụ trước hữu ích cho việc tìm kiếm các từ được phân cách bằng dấu cách, trong khi chỉ có ví dụ awk cũng tìm các từ được phân tách bằng các ký tự khoảng trống khác (và thực tế điều này rất khó để thực hiện thống nhất trên nhiều phiên bản khác nhau)). Bạn cũng có thể muốn bỏ qua một cách rõ ràng dòng sản phẩm nào, bằng cách sửa đổi tuyên bố awk như sau:

awk '{if ($1 !="") print $1}' your_file 

Nếu bạn cũng đang lo ngại về khả năng trống lĩnh vực, tức là dòng bắt đầu với khoảng trắng, sau đó một giải pháp mạnh mẽ hơn sẽ theo thứ tự. Tôi không đủ giỏi với awk để sản xuất một lớp lót cho các trường hợp như vậy, nhưng một kịch bản python ngắn mà hiện các trick có thể trông giống như:

>>> import re 
>>> for line in open('your_file'): 
...  words = re.split(r'\s', line) 
...  if words and words[0]: 
...   print words[0] 
+0

Thực tế perl regex có sẵn rộng rãi trong _grep_, và '\ s' đến thuận tiện để giải cứu:' grep -Po '^ \ s * \ K \ S +'… ' – bobbogo

0

... hay trên Windows (nếu bạn có GnuWin32 grep):

grep -Eo "^[^ ]+" file 
Các vấn đề liên quan