[ad_1]
grep
là một tiện ích Linux để tìm kiếm các tệp văn bản. Theo mặc định, nó sẽ in ra kết quả tìm kiếm, nhưng nó cũng có thể được sử dụng để khớp và in tên tệp chứa kết quả tìm kiếm, điều này có thể hữu ích khi kết nối nó với các tập lệnh khác.
Sử dụng grep để in tên tệp
grep
thường được sử dụng cùng với các lệnh khác trong tập lệnh bash như một tiện ích tìm kiếm văn bản chung. Tuy nhiên, theo mặc định, nó không in bất kỳ thứ gì về tên tệp mà bạn có thể cần nếu chuyển đầu ra cho một tiện ích khác.
Nếu bạn muốn có danh sách các tệp phù hợp, bạn có thể dùng grep
với -l
lá cờ, sẽ liệt kê các tên tệp thay vì khớp:
grep -l foo ./*
Điều này tương tự như -H
cờ, sẽ xuất ra một phản hồi có chứa tên tệp theo sau là dòng phù hợp. Tuy nhiên, với -l
nó sẽ chỉ có in tên tệp, cung cấp cho bạn danh sách các tệp chứa chuỗi tìm kiếm.
Bạn cũng có thể sử dụng một chữ hoa -L
lá cờ để làm ngược lại: in tất cả các tệp không chứa chuỗi phù hợp.
grep -L baz ./*
Cắt đường dẫn tệp
Theo mặc định, -l
cờ sẽ in các tệp có đường dẫn tệp tương đối được nối sẵn. Nếu bạn chỉ muốn tên tệp thực, bạn có thể cắt đường dẫn tệp bằng cách sử dụng basename
tính thiết thực. Điều này sẽ yêu cầu đầu vào phải được chuyển qua xargs
nhưng hoạt động khá tốt:
grep -l foo ./* | xargs -L 1 basename
Hãy ghi nhớ rằng grep -r
sẽ tìm kiếm đệ quy và nếu bạn sử dụng điều đó với basename
phản hồi có thể chứa các tệp có đường dẫn bị cắt xén không có trong hiện tại trực tiếp.
Sử dụng grep với lệnh find
grep
cũng hoạt động tốt với tiện ích tìm kiếm bổ sung của find
yêu cầu. Ví dụ: bạn có thể sử dụng nó với find
lệnh để tìm kiếm mọi tệp văn bản trong một thư mục và dễ dàng chạy một grep
Tìm kiếm:
find . -iname "*txt" -exec grep foo {} ;
Hoặc sử dụng nó với -l
cờ để liệt kê các tên tệp:
find . -iname "*txt" -exec grep -lH foo {} ;
[ad_2]
Máy tính vàng