Cách chỉ hiển thị tên tệp với grep trên Linux

[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.

1.JiBnMqyl6S

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 ./*

1.JiBnMqyl6S

Đ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 -lnó 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 ./*

1.JiBnMqyl6S

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 xargsnhưng hoạt động khá tốt:

grep -l foo ./* | xargs -L 1 basename

1.JiBnMqyl6S

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 basenamephả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 {} ;

1.JiBnMqyl6S

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 {} ;

1.JiBnMqyl6S



[ad_2]

Máy tính vàng

Đánh giá dịch vụ post
Chat Zalo
0903064855