xargs를 첫 번째 매개 변수로 전달합니다


53

이 동작을 만들려고합니다.

grep 192.168.1 *.txt

Xargs를 통해 grep에 문자열을 전달하면 첫 번째 매개 변수 대신 끝납니다.

echo 192.168.1 | xargs grep  *.txt

들어오는 문자열을 'grep'과 '*'사이에 두지 말고 xargs (또는 이와 유사한 것)에 지시해야합니다.

어떻게해야합니까?


답변:


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

샘플 파일 :

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

예제 실행 :

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

고마워요. 그런데 왜? -I로 무엇을 대체하고 있습니까? 나는 그것을 얻지 못한다.
e18r

6
중괄호는 자리 표시자인 것 같습니다. echo 192.168.1과 같이 {}을 원하는 것으로 바꿀 수 있습니다. | xargs -I pholder grep pholder * .txt
denormalizer

3

다른 접근법 :

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

이렇게하면 파일 이름이 너무 많은 쉘의 명령 행 길이가 오버 플로우되지 않습니다. 혼란을 피하기 위해 xargs/ grep파일 공간을 이름으로 -print0하고 -0널이 아닌 LF로 발견 된 각 이름을 묘사합니다 옵션.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.