Một số mẹo nhỏ khi sử dụng lệnh grep trên Linux - kèo nhà cái

/imgposts/6j8wgxgx.jpg

Tôi đã sử dụng lệnh grep trong một thời gian khá dài, nhưng hầu hết chỉ dừng lại ở mức cơ bản nhất để tìm kiếm thông tin trong các file log. Ví dụ như:

grep 'xxx' xxxx.log [kèo nhà cái](/blog/88345bea3bb0e457.html) 

Tuy nhiên, trong nhiều trường hợp phức tạp hơn, chẳng hạn như khi bạn muốn tìm kiếm những đoạn chứa ký tự đặc biệt trong log, thì việc sử dụng grep cần thêm một chút kỹ thuật. Chẳng hạn, nếu bạn muốn tìm bóng đá trực tiếp chuỗi \"userId\":\"123456\", vì đôi khi ID người dùng có thể bị nhầm lẫn với các ID khác nếu chỉ tìm theo giá trị cụ thể là 123456. Việc này sẽ gây ra bắn cá ăn xu quá nhiều nhiễu thông tin không cần thiết.

Nếu bạn thử cách đơn giản như sau:

grep '\"userId\":\"123456\"' xxxx.log

Thì có vẻ như nó không hoạt động đúng như mong đợi. Có lẽ nguyên nhân chủ yếu đến từ việc xử lý các ký tự đặc biệt như dấu chéo ngược (\) và dấu ngoặc kép ("). Đây là điều mà tôi cũng đã gặp phải trong quá trình làm việc trước đây, nhưng mãi chưa tìm ra cách giải quyết.

Cuối cùng, trong lúc đang tìm cách khắc phục một vấn đề hôm qua, tôi đã phát hiện ra rằng chỉ cần chuyển义 tất cả các ký tự đặc biệt đó bằng cách thêm dấu chéo ngược (\) trước mỗi ký tự. Cụ thể, câu lệnh sẽ trở thành:

grep '\\\"userId\\\":\\\"123456\\\"' xxxx.log

Bằng cách này, lệnh grep sẽ hiểu chính xác ý của bạn và trả về kết quả mong muốn mà không bị lỗi do các ký tự đặc biệt.