Làm thế nào để vẹt grep nghiêm trọng cho chiều dài dòng trong một phạm vi nhất định?


28

LƯU Ý: Câu hỏi này là phần bổ sung của Câu hỏi và trả lời này: Làm thế nào để "grep" cho độ dài dòng * không * trong một phạm vi nhất định?


Tôi chỉ cần nhận các dòng từ tệp văn bản (danh sách từ, được phân tách bằng dòng mới) có phạm vi độ dài tối thiểu hoặc bằng 3 ký tự, nhưng không dài hơn hoặc bằng 10 ký tự.

Thí dụ:

ĐẦU VÀO:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

ĐẦU RA:

megkíván
alma
kevesen

Câu hỏi: Làm thế nào tôi có thể làm điều này trong bash?


9
grep -x '.\{3,10\}'
Costas

@Costas rực rỡ, và cũng vậy với sed. Gửi một câu trả lời đầy đủ.
orion

Câu trả lời:


37
grep -x '.\{3,10\}'

Ở đâu

  • -x khớp mẫu với toàn bộ dòng
  • . bất kỳ biểu tượng
  • {3,10} định lượng từ 3 đến 10 lần ký hiệu trước đó (trong trường hợp bất kỳ ký hiệu nào)

10

sử dụng egrep

egrep '^.{3,10}$'

khớp từ đầu đến cuối dòng cho 3 ký tự trở lên nhưng nhỏ hơn hoặc bằng 10 ký tự.


1

Sử dụng sed:

sed '/^.\{3,10\}$/!d'

Hoặc là:

sed -r '/^.{3,10}$/!d'

0

Sử dụng awk:

awk 'length >= 3 && length <= 10' file

Câu lengthlệnh sẽ trả về độ dài của $0(bản ghi / dòng hiện tại) theo mặc định và mã này được sử dụng bởi mã để kiểm tra thời lượng của dòng nằm trong phạm vi đã cho. Nếu một bài kiểm tra như thế này không có khối hành động tương ứng, thì hành động mặc định là in bản ghi.

Kiểm tra dữ liệu đã cho:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

Tương tự với Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
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.