Tôi muốn đi dạo qua về sự khác biệt giữa grep
, pgrep
, egrep
, và fgrep
và làm thế nào tôi sẽ sử dụng chúng.
Tôi muốn đi dạo qua về sự khác biệt giữa grep
, pgrep
, egrep
, và fgrep
và làm thế nào tôi sẽ sử dụng chúng.
Câu trả lời:
grep là từ viết tắt của "In biểu thức chính quy toàn cầu". grep là chương trình quét từng tệp hoặc tệp được chỉ định theo từng dòng, trả về các dòng có chứa mẫu. Mẫu là một biểu thức chỉ định một chuỗi các chuỗi bằng cách giải thích các ký tự là các ký tự meta. Ví dụ, ký tự dấu hoa thị (*) được hiểu là "không hoặc nhiều phần tử trước". Điều này cho phép người dùng nhập một loạt ký tự ngắn và ký tự meta vào lệnh grep để máy tính hiển thị cho chúng tôi dòng nào khớp với tệp.
Lệnh grep tiêu chuẩn trông giống như:
grep <flags> '<regular expression>' <filename>
grep in kết quả tìm kiếm ra màn hình (thiết bị xuất chuẩn) và trả về các giá trị thoát sau:
0 A match was found.
1 No match was found.
>1 A syntax error was found or a file was inaccessible
(even if matches were found).
Một số cờ phổ biến là: -c
để đếm số lượng trận đấu thành công và không in các trận đấu thực tế, -i
để làm cho trường hợp tìm kiếm không nhạy cảm, -n
để in số dòng trước mỗi lần in trận đấu, -v
để lấy phần bù của biểu thức chính quy (nghĩa là trả về các dòng không khớp) và -l
để in tên tệp của tệp có dòng khớp với biểu thức.
egrep là từ viết tắt của "In biểu thức chính quy toàn cầu mở rộng".
'E' trong egrep có nghĩa là coi mẫu như một biểu thức chính quy. "Biểu thức chính quy mở rộng" viết tắt 'ERE' được bật trong egrep. egrep (mà cũng giống như grep -E
) xử lý +
, ?
, |
, (
, và )
như meta-ký tự.
Trong biểu thức thông thường cơ bản (với grep), meta-nhân vật ?
, +
, {
, |
, (
, và )
mất ý nghĩa đặc biệt của họ. Nếu bạn muốn grep để điều trị những nhân vật như meta-nhân vật, thoát khỏi chúng \?
, \+
, \{
, \|
, \(
, và \)
.
Ví dụ, ở đây grep sử dụng các biểu thức chính quy cơ bản trong đó dấu cộng được xử lý theo nghĩa đen, bất kỳ dòng nào có dấu cộng đều được trả về.
grep "+" myfile.txt
mặt khác, ví dụ, coi "+" là một ký tự meta và trả về mọi dòng vì dấu cộng được hiểu là "một hoặc nhiều lần".
egrep "+" myfile.txt
Ở đây mọi dòng được trả về vì +
được xử lý bởi egrep như một ký tự meta. grep bình thường sẽ chỉ tìm kiếm các dòng có nghĩa đen +
.
fgrep là từ viết tắt của cụm từ "In biểu thức chính quy toàn cầu chuỗi cố định".
fgrep (giống như grep -F) là grep cố định hoặc nhanh và hoạt động như grep nhưng KHÔNG nhận ra bất kỳ ký tự meta biểu thức chính quy nào là đặc biệt. Việc tìm kiếm sẽ hoàn thành nhanh hơn vì nó chỉ xử lý một chuỗi đơn giản chứ không phải là một mẫu phức tạp.
Ví dụ: nếu tôi muốn tìm kiếm .bash_profile của mình để tìm một dấu chấm theo nghĩa đen (.) Thì việc sử dụng grep sẽ khó khăn vì tôi sẽ phải thoát dấu chấm vì dấu chấm là một ký tự meta có nghĩa là 'thẻ hoang dã, bất kỳ ký tự đơn lẻ nào':
grep "." myfile.txt
Lệnh trên trả về mọi dòng của myfile.txt. Thay vào đó, hãy làm điều này:
fgrep "." myfile.txt
Sau đó, chỉ các dòng có nghĩa đen '.' trong họ được trả lại. fgrep giúp chúng tôi không bận tâm thoát khỏi các nhân vật meta của chúng tôi.
pgrep là từ viết tắt của "In biểu thức chính quy toàn cầu ID-quy trình".
pgrep xem qua các quy trình hiện đang chạy và liệt kê các ID quy trình phù hợp với tiêu chí lựa chọn cho thiết bị xuất chuẩn. pgrep rất tiện lợi khi tất cả những gì bạn muốn biết là số nguyên id của quy trình. Ví dụ, nếu tôi chỉ muốn biết ID tiến trình của quy trình mysql của tôi, tôi sẽ sử dụng lệnh pgrep mysql
sẽ trả về ID quy trình như 7312.
pgrep
thủ công : Tên quy trình được sử dụng để khớp được giới hạn trong 15 ký tự có trong đầu ra của / Proc / pid / stat . Sử dụng tùy chọn -f để khớp với dòng lệnh hoàn chỉnh, / Proc / pid / cmdline .