2012-10-10 28 views
6

Tôi muốn nhận danh sách các dòng trong một tệp lô có độ dài lớn hơn 120 ký tự. Vì điều này tôi đã nghĩ đến việc sử dụng sed. Tôi đã thử nhưng tôi đã không thành công. Làm thế nào tôi có thể đạt được điều này ? Có cách nào khác để có được một danh sách khác hơn là sử dụng sed ?? Cảm ơn ..Tìm các dòng có độ dài lớn hơn 120 ký tự bằng cách sử dụng sed

Trả lời

11

Một cách khác để làm điều này sử dụng awk:

cat file | awk 'length($0) > 120' 
+0

Cảm ơn. Nó đã làm việc. Làm thế nào tôi có thể nhận được số dòng? – Sravan

+0

Bất kỳ lý do nào để sử dụng 'cat'? – choroba

+1

awk 'chiều dài ($ 0)> 120 {print NR ":" $ 0}' – piokuc

7

Bạn có thể sử dụng grep và lượng hóa sự lặp lại của nó:

grep '.\{120\}' script.sh 
+0

+1. Bleh, nhanh hơn vài giây. –

+0

'grep' nhanh hơn ít nhất là 10x trên các tệp lớn (10Gb). – FeedTheWeb

5

Sử dụng sed, bạn có một số lựa chọn thay thế:

sed -e '/.\{120\}/!d' 
sed -e '/^.\{,119\}$/d' 
sed -ne '/.\{120\}/p' 

Tùy chọn đầu tiên khớp với các dòng không có (ít nhất) 1 20 ký tự (số ! sau biểu thức là thực hiện lệnh trên các dòng không khớp với mẫu trước đó) và xóa chúng (ví dụ: không in chúng).

Tùy chọn thứ hai khớp với các dòng bắt đầu (^) để kết thúc ($) có tổng số ký tự từ 0 đến 119. Các dòng này cũng bị xóa.

Tùy chọn thứ ba là sử dụng cờ -n, cho phép sed không in dòng theo mặc định và chỉ in một thứ gì đó nếu chúng tôi yêu cầu. Trong trường hợp này, chúng tôi khớp các dòng có (ít nhất) 120 ký tự và sử dụng p để in chúng.

+0

Các câu hỏi tên 'sed' cụ thể. Trong khi tôi đánh giá cao tất cả các câu trả lời khác, đây là một trong những chỉ hoạt động khi sed là tất cả các bạn có. – Leo

Các vấn đề liên quan