Sử dụng sed / awk để loại bỏ bất cứ thứ gì sau không gian đầu tiên


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Sử dụng sed / awk / thay thế, trong văn bản trên tôi muốn loại bỏ bất cứ thứ gì xuất hiện sau khoảng trắng đầu tiên trong mỗi dòng. Ví dụ: đầu ra sẽ là:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

Bất kỳ trợ giúp sẽ được đánh giá cao.

Câu trả lời:


35

Trầm tích

sed 's/\s.*$//'

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Như đã chỉ ra trong các ý kiến, -okhông phải là POSIX; tuy nhiên cả GNU và BSD đều có nó, vì vậy nó sẽ hoạt động với hầu hết mọi người.

Ngoài ra, \s/ \Scó thể không có trên tất cả các hệ thống, nếu hệ thống của bạn không nhận ra nó, bạn có thể sử dụng một không gian theo nghĩa đen hoặc nếu bạn muốn có không gian và tab, những thứ trong một biểu thức ngoặc ( [...]) hoặc [[:blank:]]lớp ký tự (lưu ý rằng nói đúng \slà tương đương [[:space:]]và bao gồm các ký tự khoảng cách dọc cũng như CR, LF hoặc VT mà bạn có thể không quan tâm).

Người awk ta giả sử các dòng không bắt đầu bằng một ký tự trống.


14
cut -d ' ' -f 1 < your-file

sẽ là hiệu quả nhất.


4
Tôi nhận thấy điều này trong một số câu trả lời của bạn và tôi đã tự hỏi liệu có lý do nào không: bạn dường như luôn thêm chuyển hướng đầu vào ngay cả khi lệnh có thể hoạt động mà không có nó. Bạn có thể vui lòng giải thích tại sao <nó hữu ích ở đây?
Joseph R.

5
@JosephR. Ý bạn là cut < filevs cut file? Sau đó xem unix.stackexchange.com/a/70759/22565
Stéphane Chazelas

cắt có thể là giải pháp tốt nhất cho các vấn đề đơn giản này. Tôi sẽ dành awk (hoặc perl) cho kết hợp phức tạp hơn.
ChuckCottrill

@StephaneChazelas Cảm ơn bạn về cái nhìn sâu sắc (đặc trưng) :)
Joseph R.


1

Và một trong những perl,

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

Thông qua GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
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.