Các bài trong khoáBài 12/30

30 bài

Domain 2: Tool Design & MCP Integration·Task 2.5

Dùng đúng tool có sẵn Read, Write, Edit, Bash, Grep, Glob

Khi nào dùng Grep, khi nào dùng Glob, vì sao Edit có lúc thất bại và cách xử lý, và cách tìm hiểu một codebase lạ từng bước thay vì đọc hết.

  • 5 phút đọc
  • Đối chiếu docs 02/11/2026
  • 2 nguồn

Đọc xong bạn nắm được

  • Chọn Grep để tìm nội dung, Glob để tìm file theo tên
  • Hiểu khi nào Edit thất bại và dùng Read cộng Write thay thế
  • Tìm hiểu codebase từng bước, bắt đầu từ Grep rồi mới Read
  • Lần theo một hàm được export lại qua module trung gian

Claude Code và Agent SDK có sẵn một bộ tool để làm việc với file và lệnh: Read, Write, Edit, Bash, Grep và Glob. Đề thi hay hỏi chọn tool nào cho tình huống nào, và xử lý ra sao khi tool không làm được.

Bài này giúp bạn trả lời: tìm thứ gì thì dùng tool gì, sửa file thì dùng tool gì, và tìm hiểu một codebase lạ theo thứ tự nào cho đỡ tốn công?

Ví dụ xuyên suốt: lập trình viên mới ở một sàn thương mại điện tử

Quân vừa vào nhóm phát triển một sàn thương mại điện tử. Việc đầu tiên được giao: hàm calculateShippingFee sắp đổi cách tính, cần biết tất cả những chỗ đang dùng nó, rồi sửa một dòng cấu hình trong file config/shipping.ts.

Codebase có hơn 2.000 file. Quân nhờ Claude Code làm cùng.

Sáu tool và việc của từng tool

ToolLàm gìVí dụ
GrepTìm nội dung bên trong file theo mẫuTìm mọi dòng có calculateShippingFee(
GlobTìm file theo tên hoặc đuôiTìm mọi file **/*.test.ts
ReadĐọc toàn bộ một fileĐọc config/shipping.ts
WriteTạo file mới, hoặc ghi đè toàn bộ fileGhi lại cả file sau khi sửa
EditSửa một đoạn cụ thể trong file bằng cách thay chuỗiĐổi maxWeight: 30 thành maxWeight: 50
BashChạy lệnh trong terminalChạy test, chạy build

Cặp hay bị nhầm là Grep và Glob:

  • Muốn tìm chỗ gọi một hàm, một thông báo lỗi, một dòng import: đó là nội dung trong file, dùng Grep.
  • Muốn tìm file test, file cấu hình, mọi file .tsx: đó là tên file, dùng Glob.

Theo tài liệu Claude Code, Grep chạy trên ripgrep và dùng cú pháp regex của ripgrep. Glob hỗ trợ ** để tìm ở mọi tầng thư mục, ví dụ **/*.js khớp mọi file .js ở bất kỳ độ sâu nào.

Một chi tiết khi dùng thật: Claude Code bản hiện tại chỉ có sẵn Glob và Grep trên Windows. Trên macOS, Linux và WSL, Claude tìm bằng lệnh find và grep qua Bash. Ý chọn tool vẫn như nhau: tìm theo tên file hay tìm nội dung trong file. Đề thi hỏi theo tên tool Glob và Grep.

Khi Edit thất bại

Edit hoạt động bằng cách thay một chuỗi cũ (old_string) bằng một chuỗi mới (new_string). Tài liệu Claude Code ghi hai điều kiện:

  • Chuỗi cũ phải có trong file đúng y như viết, lệch một dấu cách hay một lần thụt dòng là không khớp.
  • Chuỗi cũ phải xuất hiện đúng một lần.

File config/shipping.ts của Quân có ba khối cấu hình cho ba vùng, khối nào cũng có dòng maxWeight: 30,. Edit với old_string là maxWeight: 30, sẽ không biết sửa chỗ nào.

Có hai cách xử lý:

  1. Dùng chuỗi cũ dài hơn, kèm vài dòng xung quanh để chỉ đúng một chỗ, ví dụ kèm cả dòng region: "north", ở trên.
  2. Nếu không tìm được đoạn nào đủ riêng, Read cả file rồi Write lại toàn bộ với nội dung đã sửa.

Đề thi chấm cách thứ hai là phương án dự phòng chắc chắn khi Edit không tìm được đoạn văn bản duy nhất để bám vào.

Tìm hiểu codebase từng bước

Với 2.000 file, đọc hết từ đầu là không thể và cũng không cần. Cách làm là đi từng bước, mỗi bước chỉ đọc thêm những gì cần:

  1. Grep tìm điểm bắt đầu: calculateShippingFee được định nghĩa ở đâu, được gọi ở đâu.
  2. Read file định nghĩa hàm, xem nó nhận gì, trả gì.
  3. Lần theo các dòng import để biết hàm đi qua những module nào, Read tiếp đúng những file đó.
  4. Dừng khi đã đủ hiểu để làm việc được giao.

Đề thi gọi đây là xây dựng hiểu biết về codebase từng bước (building codebase understanding incrementally), thay vì đọc hết mọi file ngay từ đầu.

Lần theo hàm được export lại

Grep tìm calculateShippingFee( ra 12 chỗ gọi. Nhưng Quân biết có những trang vẫn tính phí ship mà không nằm trong 12 chỗ đó. Vì sao?

Codebase có một module trung gian utils/index.ts:

export { calculateShippingFee as shippingFee } from "./shipping/fee.ts";
export { calculateShippingFee } from "./shipping/fee.ts";

Một số file gọi shippingFee(...), cái tên Grep không tìm vì nó chỉ tìm calculateShippingFee.

Cách làm đúng gồm hai bước:

  1. Tìm mọi tên mà hàm được export ra ở các module trung gian: ở đây là calculateShippingFee và shippingFee.
  2. Grep từng tên trên toàn codebase.

Nguồn

  1. Exam Guide CCAR-F v1.0, Task Statement 2.5(mở tab mới)
  2. Tools reference (Claude Code)(mở tab mới)

Nắm rồi thì thử sức với đề

Xem khoá luyện thi
Dùng đúng tool có sẵn Read, Write, Edit, Bash, Grep, Glob · Anthropic Exam Pro