các dòng grep bắt đầu với phiên bản 1 1 trong Ubuntu


47

Tôi cố gắng tìm kiếm các dòng bắt đầu bằng "1" bằng cách sử dụng

ls -1 | grep ^1*

nhưng nó trả về các dòng không bắt đầu bằng 1. Tôi đang thiếu gì ở đây?


Chỉ là một lưu ý khác: Nếu bạn muốn sử dụng grep để hạn chế lsđầu ra, bạn sẽ gặp vấn đề nếu tên tệp chứa một số ký tự lạ, chẳng hạn như dòng mới ... Nhiều lệnh khác ( lsít nhất là không phải là phiên bản mà tôi phải kiểm tra) có một tùy chọn để cung cấp đầu ra tách biệt null, sau đó bạn có thể xử lý một cách an toàn vớigrep -z
Gert van den Berg

Cảm ơn, @GertvandenBerg! Vấn đề gì mà một số nhân vật kỳ lạ như dòng mới gây ra cho grep? Những lệnh nào cho đầu ra tách biệt null?
Tim

1
tìm với -print0, hầu hết các công cụ GNU khác đều có tùy chọn -0 hoặc -z. (sắp xếp, xargs, vv là tốt). Nếu tên tệp chứa dòng mới, sẽ không thể biết được hai dòng có phải là tên tệp chứa dòng mới hay hai tên tệp riêng biệt hay không.
Gert van den Berg

Câu trả lời:


68

Biểu hiện thường xuyên của bạn không có nghĩa là những gì bạn nghĩ nó làm. Nó khớp với tất cả các dòng bắt đầu (^) với một (1) lần lặp lại 0 hoặc nhiều lần (*) lần. Tất cả các chuỗi phù hợp với biểu thức thông thường. grep '^1'làm những gì bạn muốn.


33

Bạn đã thử những điều sau đây?

 ls -1 | grep "^1"

Đó là, loại bỏ *, về cơ bản cho biết grep, tìm không hoặc nhiều lần xuất hiện của ^1biểu thức. Nói cách khác: khớp với các dòng bắt đầu bằng 1 hoặc không.


13

Mặc dù điều này không trả lời câu hỏi của bạn, đây là một giải pháp tốt hơn cho những gì dường như là mục tiêu của bạn:

ls -ld 1*

Bạn có thể sử dụng shell toàn cầu để liệt kê tất cả các tệp bắt đầu bằng 1. Lưu ý rằng *có một ý nghĩa khác trong toàn cầu vỏ so với biểu thức thông thường.


Cảm ơn! +1. Làm thế nào * có ý nghĩa khác nhau trong shellbing và trong các biểu thức chính quy?
Tim

2
Trong shell shell * là ký tự đại diện có nghĩa là "0 hoặc nhiều hơn bất kỳ ký tự nào ". Ý nghĩa regex được giải thích trong câu trả lời của otokan.
jordanm

3

^ 1. * khớp với toàn bộ dòng, hoặc như đã nói ở trên, ^ 1 có chuỗi chứa trong dòng.

các kiểu regex khác nhau sử dụng các ký hiệu khác nhau đại diện cho ký tự, một số tùy chọn chỉ định kiểu bạn muốn. và các tùy chọn khác nhau xác định xem bạn muốn khớp toàn bộ dòng hay chỉ một phần của dòng đó hoặc toàn bộ đầu vào dưới dạng một chuỗi.

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.