Điểm:0

lệnh grep sử dụng ký tự đại diện [0-9]

lá cờ in
dữ liệu grep ".0000000" > đầu ra

Tôi trích xuất tất cả dữ liệu số kết thúc bằng .0000000 trong tệp văn bản dữ liệu. Khi tôi thay đổi mã này bằng ký tự đại diện như sau:

grep ".[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" dữ liệu > đầu ra

Đoạn mã trên được cho là trích xuất tất cả dữ liệu số kết thúc bằng bảy chữ số bất kỳ sau dấu chấm, nhưng nó không hoạt động như mong đợi. Làm cách nào tôi có thể sửa đổi mã ở trên để trích xuất tất cả dữ liệu số kết thúc bằng bảy chữ số bất kỳ sau dấu chấm?

lá cờ hr
`.` trong grep regex khớp với bất kỳ ký tự đơn nào - nếu bạn muốn khớp một dấu chấm theo nghĩa đen (dấu chấm), bạn cần `\.` hoặc `[.]`
lá cờ ar
@steeldriver nhận xét của bạn giống như câu trả lời! :)
lá cờ hr
@ user68186 có lẽ... tôi không biết. Mô tả "nó không hoạt động như nó được cho là" khá mơ hồ ... ít nhất nó cũng cần một số loại ranh giới hoặc neo nếu OP muốn * chính xác * 7 chữ số
deepblue avatar
lá cờ in
@steeldriver, nếu bạn trả lời câu hỏi này, tôi sẽ chấp nhận nó. Giải pháp của bạn hoạt động.
Điểm:3
lá cờ hr

Không rõ từ mô tả của bạn liệu biểu thức của bạn không khớp với những thứ bạn muốn hay khớp với những thứ bạn không muốn.

Nếu là vế sau thì có thể là do . trong một biểu thức chính quy grep khớp với bất kỳ ký tự đơn nào (ngoại trừ ký tự xuống dòng - tuy nhiên grep vẫn thường dựa trên dòng). Để khớp với một dấu chấm (dấu chấm) theo nghĩa đen, bạn cần thoát nó \. hoặc đặt nó trong một bộ ký tự như bạn đã thực hiện đối với phạm vi chữ số thập phân:

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"

Bạn cũng đề cập rằng biểu thức phải khớp với dữ liệu "kết thúc bằng" - không rõ ý của bạn là kết thúc dòng hoặc một Ranh giới từ - đây là tương ứng $\b (hoặc \>) Ví dụ.

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\b"

Bạn cũng có thể rút ngắn biểu thức bằng bộ định lượng - chuyển sang chế độ biểu thức chính quy mở rộng (ERE)1:

grep -E "[.][0-9]{7}$"

1 Trong GNU grep, bạn có thể sử dụng các bộ định lượng ở chế độ biểu thức chính quy cơ bản (BRE) bằng cách thoát khỏi dấu ngoặc nhọn grep "[.][0-9]\{7\}$"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.