使 xargs 作为第一个参数传递

and*_*oot 80 xargs

我试图产生这种行为:

grep 192.168.1 *.txt
Run Code Online (Sandbox Code Playgroud)

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

echo 192.168.1 | xargs grep  *.txt
Run Code Online (Sandbox Code Playgroud)

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

我该怎么做呢?

slm*_*slm 134

$ echo 192.168.1. | xargs -I{} grep {} *.txt
Run Code Online (Sandbox Code Playgroud)

例子

示例文件:

$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
Run Code Online (Sandbox Code Playgroud)

  • 大括号似乎是一个占位符。您可以将 {} 替换为您喜欢的任何内容:echo 192.168.1。| xargs -I pholder grep pholder *.txt (9认同)

小智 5

另一种方法:

find . -name \*.txt -print0 | xargs -0 grep 192.168.1
Run Code Online (Sandbox Code Playgroud)

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