Làm cách nào để tôi chỉ tìm nạp các số trong grep?


58

Tôi có tập tin như thế này:

 other lines . . .    
 blah blah blah (:34)

Tôi muốn tìm sự xuất hiện của các số trong tập tin trên. Tôi đến với:

grep [0-9] filename

Nhưng đó là in toàn bộ:

blah blah blah (:34)

Thay vào đó tôi chỉ muốn 34. Có cách nào để làm như vậy?


Trong tương lai, cũng kiểm tra trang man cho grep (hoặc bất kỳ chương trình nào khác). Trang hướng dẫn chi tiết các tùy chọn cần thiết cho nhiều mục đích sử dụng phổ biến của chương trình. ví dụman grep
hnasarat

Bạn có thể thử cái này> grep -o '[0-9] [0-9] *' testfile

Câu trả lời:


76

Bạn có thể sử dụng grep -Eđể truy cập cú pháp biểu thức chính quy mở rộng (Giống như egrep )

Tôi đã tạo một testfile với nội dung dưới đây:

>cat testfile
this is some text
with some random lines

again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)

Bây giờ để grep các số một mình từ văn bản bạn có thể sử dụng

>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324

sẽ là đầu ra.

Ở đây "-o" được sử dụng để chỉ xuất đoạn phù hợp của dòng, thay vì toàn bộ nội dung của dòng.

Dấu ngoặc vuông (ví dụ {và}) cho biết số lượng phiên bản của trận đấu. {1,4} yêu cầu rằng ký tự hoặc lớp ký tự trước đó phải xảy ra ít nhất một lần, nhưng không quá bốn lần.

Hi vọng điêu nay co ich


3
Đẹp. Ngoài ra, để khớp nhiều hơn 4 hoặc số chữ số tùy ý, hãy sử dụng grep -Eo '[0-9]{1,}' testfile
FractalSpace

9

Bạn có thể sử dụng biểu thức khung RE được [:digit:]chỉ định theo mục 9.3.5 của tiêu chuẩn POSIX , kết hợp với -ocờ để chỉ in "từ" phù hợp

$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'                                                     
123

5

grep -osẽ chỉ in phần phù hợp của dòng. Nếu không, grep sẽ in bất kỳ dòng nào với mẫu.


1

Tôi sẽ sử dụng curl để truy cập tệp của bạn cục bộ hoặc từ xa, sau đó tôi sẽ grep các dòng với các số được bọc trong (:) sau đó cắt các phần đó ra và ghi vào tệp

câu trả lời được chấp nhận bỏ qua có thể có các số trong các dòng trước của tệp, nó hoạt động với dữ liệu mẫu, nhưng nếu tệp ở xa thì sao?

Địa phương

curl file:///home/$USER/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

Trong ví dụ này output.txttrong thư mục hiện tại của bạn sẽ được viết lại, chúng tôi đang truy cập input.txttừ thư mục Công cộng của bạn.

Xa

curl https://yoursite.com/Public/input.txt  | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt

Trong ví dụ này output.txttrong thư mục hiện tại của bạn sẽ được viết lại, chúng tôi đang truy cập input.txttừ https://yoursite.com/Public/.


1
Tại sao sử dụng curlkhi đơn giản catsẽ làm gì?
PerlDuck

Câu hỏi không nêu rõ rằng tệp là cục bộ. Câu trả lời này cho phép cả hai.
Stef
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.