Nhận số dòng trong khi sử dụng grep


360

Tôi đang sử dụng grep đệ quy để tìm kiếm tệp cho một chuỗi và tất cả các tệp phù hợp và các dòng chứa chuỗi đó được in trên thiết bị đầu cuối. Nhưng có thể lấy số dòng của những dòng đó không ??

ví dụ: hiện tại những gì tôi nhận được là /var/www/file.php: $options = "this.target", nhưng những gì tôi đang cố gắng nhận được /var/www/file.php: 1142 $options = "this.target";, đó 1142sẽ là số dòng chứa chuỗi đó.

Cú pháp tôi đang sử dụng để grep đệ quy là sudo grep -r 'pattern' '/var/www/file.php'

Một câu hỏi nữa là, làm thế nào để chúng ta có được kết quả không bằng một mẫu. Giống như tất cả các tập tin nhưng không phải là những tập tin có một chuỗi nhất định?


Cờ -v sẽ hiển thị các dòng không khớp (grep -v myText MyFile.txt)
bcarroll

Câu trả lời:


546
grep -n SEARCHTERM file1 file2 ...

Tôi đã có một câu hỏi nhanh khác, làm thế nào để chúng ta có được kết quả không bằng một mẫu. Giống như tất cả các tập tin nhưng không phải là những tập tin có một chuỗi nhất định?
sai

5
đó sẽ là dòng lệnh -v. Nếu bạn chạy 'grep --help', nó sẽ hiển thị tất cả các tùy chọn
Miro A.

56
Bạn không cần -rnếu bạn chỉ định nhiều tệp. Bạn chỉ cần -rnếu bạn chỉ định thư mục.
Sparhawk

@JeanPaul - Tôi thấy kết quả tương tự cho cả -nr và -n -r. Phiên bản nào của grep bạn đang sử dụng? $ grep -n -r tên * | wc -l 1984 $ grep -nr tên * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.

Mã chỉ trả lời, không có lời giải thích. : S
Florian Castelain

148

Số dòng được in bằng grep -n:

grep -n pattern file.txt

Để chỉ lấy số dòng (không có dòng phù hợp), người ta có thể sử dụng cut:

grep -n pattern file.txt | cut -d : -f 1

Các dòng không chứa mẫu được in bằng grep -v:

grep -v pattern file.txt

3
Và số dòng phù hợp cuối cùng: grep -n pattern file.txt | cut -d : -f 1 | tail -1(bạn có thể lưu số này vào một biến và sử dụng nó để ví dụ tệp đuôi từ nó)
Nux

Và để xóa số / dấu hai chấm ở đầu mỗi chuỗi, bạn có thể sử dụng một cái gì đó như:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

Nếu bạn chỉ muốn số dòng làm điều này:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Thí dụ:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'cũng hoạt động & bạn không cần -rtrong grepkhi được sử dụng trên các tập tin (chỉ các thư mục có thể được tìm kiếm đệ quy)
Stuart Cardall

7
grep -A20 -B20 pattern file.txt

Tìm kiếm mẫu và hiển thị 20 dòng sau và trước mẫu


11
Đây không phải là tất cả những gì được yêu cầu.
Jonathon Reinhart

3
Ngoài ra, -C20là phiên bản ngắn hơn nếu đó là những gì mong muốn
Marty Neal


0

Để hiển thị kết quả với số dòng, bạn có thể thử điều này

grep -nr "word to search for" /path/to/file/file 

Kết quả sẽ giống như thế này:

linenumber: other data "word to search for" other data
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.