使 xargs 作为第一个参数传递

使 xargs 作为第一个参数传递

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

grep 192.168.1 *.txt

通过 Xargs 将字符串传递到 grep 中,但它是在末尾而不是作为第一个参数。

echo 192.168.1 | xargs grep  *.txt

我需要告诉 xargs (或类似的东西)将传入的字符串放在“grep”和“*”之间,而不是放在末尾。

我该怎么做呢?

答案1

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

例子

示例文件:

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

运行示例:

# example uses {} but you can use whatever, such as -I{} or -Ifoo
$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.

答案2

另一种方法:

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

这不会因文件名过多而溢出 shell 的命令行长度。为了避免混淆xargs/grep与带有空格的文件名,-print0选项-0将使用 null 而不是 LF 来描述每个找到的名称。

相关内容