Làm cách nào tôi có thể định dạng đầu ra grep của mình để hiển thị số dòng ở cuối dòng và số lần truy cập?


378

Tôi đang sử dụng grep để khớp chuỗi trong một tệp. Đây là một tập tin ví dụ:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt trả lại

example two null,
example four null,

Làm cách nào tôi có thể trả về các dòng trùng khớp với số dòng như thế này:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Tôi biết -c trả về tổng số dòng khớp, nhưng tôi không biết cách định dạng chính xác để thêm total null countvào trước và tôi không biết cách thêm số dòng.

Tôi có thể làm gì?

Câu trả lời:


600

-n trả về số dòng.

-ilà cho trường hợp bỏ qua. Chỉ được sử dụng nếu không phù hợp với trường hợp

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Kết hợp với awkđể in ra số dòng sau trận đấu:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Sử dụng thay thế lệnh để in ra tổng số null:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

Tôi có thể định dạng này bằng cách thêm số dòng sau thay vì trước bằng :?
Luân Đôn

giải pháp của bạn có vẻ ổn nhưng gặp lỗiawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
London

Xin lỗi đã chuyển sang linux bây giờ nó hoạt động :) nó là phiên bản windows không tốt lắm
London

1
... các hiệp sĩ nói rằng đó là -nicách bạn nhớ thủ thuật này
santiago arizti

59

Sử dụng -nhoặc --line-number.

Kiểm tra man grepđể có nhiều lựa chọn hơn.


3
người dùng linux mới lười đọc trang man. Nhưng nếu họ sử dụng linux đủ, họ sẽ quen với nó :) Nó siêu hữu ích :)
Dzung Nguyen

19
Không phải lúc nào cũng lười biếng, (Nhưng đôi khi), thường thì người dùng Linux mới gặp khó khăn khi hiểu trang nam. (Chúng có vẻ khó hiểu)
TecBrat 18/12/13

đôi khi trang man có thể mất nhiều trang. Và điều này thật khó để đọc tất cả chúng
Eugen Konkov

7

sử dụng grep -n -i null myfile.txtđể xuất số dòng trước mỗi trận đấu.

Tôi không nghĩ grep có một công tắc để in tổng số dòng được khớp, nhưng bạn có thể chuyển đầu ra của grep vào wc để thực hiện điều đó:

grep -n -i null myfile.txt | wc -l

3
-c sẽ in tổng số dòng phù hợp
dpatchery

Bạn đúng rồi. Thật không may, nó cũng ngăn chặn đầu ra bình thường.
jhenninger

7

Hoặc sử dụng awkthay thế:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

greptìm các dòng và xuất số dòng, nhưng không cho phép bạn "lập trình" những thứ khác. Nếu bạn muốn bao gồm văn bản tùy ý và thực hiện "lập trình" khác, bạn có thể sử dụng awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Hoặc chỉ sử dụng shell (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

hoặc trong perl (cho đầy đủ ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'

2

Tham khảo liên kết này cho lệnh linux linux http://linuxcommand.org/man_pages/grep1.html

để hiển thị dòng không, dòng mã và tệp sử dụng lệnh này trong thiết bị đầu cuối hoặc cmd, GitBash (Được cung cấp bởi thiết bị đầu cuối)

grep -irn "YourStringToBeSearch"

1

Chỉ cần nghĩ rằng tôi có thể giúp bạn trong tương lai. Để tìm kiếm nhiều chuỗi số và dòng đầu ra và duyệt qua đầu ra, gõ:

egrep -ne 'null|three'

sẽ hiển thị:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

sẽ hiển thị đầu ra trong một phiên ít hơn

HTH tháng sáu

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.