我正在尝试产生这种行为:
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 来描述每个找到的名称。