Đặt xargs vượt qua làm tham số đầu tiên


53

Tôi đang cố gắng tạo ra hành vi này:

grep 192.168.1 *.txt

Bằng cách chuyển một chuỗi vào grep qua Xargs nhưng nó sẽ kết thúc thay vì là tham số đầu tiên.

echo 192.168.1 | xargs grep  *.txt

Tôi cần nói với xargs (hoặc một cái gì đó tương tự) để đặt chuỗi đến giữa 'grep' và '*' thay vì ở cuối.

Làm thế nào để tôi làm điều này?


Câu trả lời:


83
$ echo 192.168.1. | xargs -I{} grep {} *.txt

Thí dụ

Các tệp mẫu:

$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1

Chạy ví dụ:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.

Cảm ơn, nó hoạt động. Nhưng tại sao? Bạn đang thay thế bằng -I? Tôi không hiểu
e18r

6
Có vẻ như dấu ngoặc nhọn là một người giữ chỗ. Bạn có thể thay thế {} bằng bất cứ thứ gì bạn thích: echo 192.168.1. | xargs -I pholder grep pholder * .txt
chuẩn

3

Cách tiếp cận khác:

find . -name \*.txt -print0 | xargs -0 grep 192.168.1

Điều này sẽ không vượt quá độ dài dòng lệnh của shell với quá nhiều tên tệp. Để tránh gây nhầm lẫn xargs/ grepvới các tên tệp có khoảng trắng -print0-0các tùy chọn sẽ phân định từng tên được tìm thấy bằng null thay vì một tệp LF.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.