Học bằng cách đọc theo thứ tự

Tìm kiếm văn bản — grep

Học cách tìm các dòng chứa chuỗi, cùng khi nào dùng -i để bỏ qua hoa thường, -n cho số dòng, và -r để tìm kiếm đệ quy — thực hành ngay trên terminal trong trình duyệt.

Tìm kiếm chuỗi — grep

grep là lệnh lọc ra và hiển thị chỉ những dòng trong tệp chứa chuỗi cho trước.

Dùng như grep chuỗi-tìm kiếm tênfile, và nếu có dòng khớp, chúng in ra màn hình nguyên trạng.

Dùng nó để tìm đúng những dòng bạn cần từ một log lớn.

grep lọc ra chỉ những dòng khớp
applebananacherrygrep banana fruits.txtchỉ hiển thị bananakhớpdòng kháckhông xuất hiện
grep lọc ra chỉ những dòng chứa chuỗi cho trước, và không xuất phần còn lại.
echo 'error: disk full' > log.txt   # tạo dòng 1
echo 'info: started' >> log.txt     # nối thêm
echo 'error: timeout' >> log.txt    # nối thêm
grep error log.txt                  # 2 dòng chứa error
grep info log.txt                   # 1 dòng chứa info

① Tạo dòng 1 bằng echo 'error: disk full' > log.txt, rồi nối thêm bằng echo 'info: started' >> log.txtecho 'error: timeout' >> log.txt để tạo tệp dữ liệu 3 dòng.

② Dùng grep để hiển thị chỉ những dòng chứa error từ log.txt.

③ Xác nhận rằng mọi dòng được hiển thị đều chứa error. (Chạy đúng thì phần giải thích sẽ hiện ra.)

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...

Bỏ qua hoa thường — -i / Số dòng — -n

grep phân biệt chữ hoa và chữ thường.

Thêm -i để tìm kiếm không phân biệt, nhờ vậy bạn có thể bắt cả Error lẫn error.

Thêm -n và số dòng được hiển thị trước mỗi dòng khớp, để bạn biết nó ở đâu trong tệp.

-i-n có thể kết hợp và áp dụng cùng lúc, như grep -in error app.txt.

Tùy chọnÝ nghĩaVí dụ
-iKhông phân biệt chữ hoa và chữ thườnggrep -i error log.txt
-nThêm số dòng trước mỗi kết quả khớpgrep -n error log.txt
-vHiển thị những dòng không khớpgrep -v info log.txt
-rTìm kiếm thư mục đệ quygrep -r TODO src
echo 'Error in disk' > app.txt   # tạo dòng 1
echo 'error in app' >> app.txt   # nối thêm
echo 'ok' >> app.txt             # nối thêm
grep -i error app.txt            # 2 dòng Error và error
grep -n error app.txt            # 2:error in app (kèm số dòng)

① Tạo dòng 1 bằng echo 'Error in disk' > app.txt, rồi nối thêm bằng echo 'error in app' >> app.txtecho 'ok' >> app.txt để tạo dữ liệu có hoa thường hỗn hợp.

② Trước tiên tìm error bằng grep với tùy chọn bỏ qua hoa thường, và xác nhận dòng Error cũng được bắt.

③ Tiếp theo chạy cùng lệnh tìm kiếm với tùy chọn hiển thị số dòng, và xác nhận số dòng xuất hiện trước mỗi kết quả khớp.

Linux console
0 / 5 đã hoàn thành
Loading Linux Terminal...

Loại trừ dòng không khớp — -v

Thêm -vgrep hiển thị những dòng không chứa chuỗi cho trước.

Trong khi grep thông thường giữ các dòng khớp, -v loại bỏ các dòng khớp và xuất phần còn lại.

Dùng nó khi bạn muốn đọc log với các dòng không cần thiết (như info hay debug) bị loại bỏ.

grep -v giữ những dòng không khớp
error: disk fullinfo: startederror: timeoutgrep -v info log.txtdòng có infobị loại trừhiển thị 2 dòngerror còn lại
-v loại trừ những dòng chứa chuỗi cho trước và chỉ hiển thị phần còn lại.
echo 'error: disk full' > log.txt   # tạo dòng 1
echo 'info: started' >> log.txt     # nối thêm
echo 'error: timeout' >> log.txt    # nối thêm
grep -v info log.txt                # 2 dòng không chứa info

① Tạo dòng 1 bằng echo 'error: disk full' > log.txt, rồi nối thêm bằng echo 'info: started' >> log.txtecho 'error: timeout' >> log.txt để tạo tệp dữ liệu 3 dòng.

② Dùng grep với tùy chọn giữ dòng không khớp để hiển thị chỉ những dòng từ log.txt không chứa info.

③ Xác nhận rằng các dòng được hiển thị là 2 dòng error và dòng info không còn nữa.

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...

Tìm kiếm thư mục đệ quy — -r

Khi bạn muốn tìm kiếm không chỉ một tệp mà mọi tệp trong một thư mục, thêm -r và truyền tên thư mục thay vì tên tệp.

Nó đi xuống các thư mục con đệ quy và hiển thị các dòng khớp theo dạng tênfile:dòng.

grep -r duyệt thư mục đệ quy
grep -r TODO srcsrc/src/a.txtTODO: fix latersrc/sub/src/sub/b.txtTODO: review
grep -r bắt đầu từ src bạn truyền vào và đi xuống thư mục con src/sub để tìm kiếm mọi tệp.
mkdir -p src/sub                       # tạo thư mục dữ liệu
echo 'TODO: fix later' > src/a.txt     # 1 tệp trong thư mục cha
echo 'TODO: review' > src/sub/b.txt    # 1 tệp trong thư mục con
grep -r TODO src                       # tìm kiếm đệ quy dưới src

① Tạo cây dữ liệu có thư mục con bằng mkdir -p src/sub.

② Với echo 'TODO: fix later' > src/a.txtecho 'TODO: review' > src/sub/b.txt, tạo tệp trong cả thư mục cha lẫn thư mục con.

③ Tìm kiếm TODO dưới thư mục src bằng grep và tùy chọn tìm kiếm đệ quy, rồi xác nhận các dòng từ cả hai tệp đều xuất hiện.

Linux console
0 / 4 đã hoàn thành
Loading Linux Terminal...
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Điều gì được hiển thị khi bạn chạy grep error log.txt?

Câu 2Tùy chọn nào bạn thêm vào grep để tìm kiếm không phân biệt chữ hoa và chữ thường?

Câu 3grep hoạt động như thế nào khi bạn thêm -r và truyền thư mục?