使xargs作为第一个参数传递


53

我正在尝试产生这种行为:

grep 192.168.1 *.txt

通过Xargs将字符串传递给grep,但是它在最后而不是作为第一个参数。

echo 192.168.1 | xargs grep  *.txt

我需要告诉xargs(或类似的东西)将输入的字符串放在'grep'和'*'之间,而不是放在最后。

我该怎么做呢?


Answers:


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
规范化程序

3

另一种方法:

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

这不会使shell的命令行长度包含过多的文件名。为了避免混淆xargs/ grep与有空格的文件名,-print0-0选择将划定各自找到名称与一个空,而不是一个LF。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.