shell xargs命令的用法介绍

xargs是一个将管道的输出作为后续执行命令的参数。 这是和管道的本质区别。 管道是将输出作为输入, xargs 是将输出作为参数。xargs后面必须有命令,默认是echo

理解 xargs 是将输出作为参数

echo --version | xargs bash
# <==> 
bash --version 

以上两条命令是等价的,都是产看bash的版本。 echo 输出的版本有 xargs 处理后变成后面的命令bash的参数。

默认的命令 echo

以下两个命令是等价的

#
# xargs 后面必须有个命令,有则用echo
echo "file.txt" | xargs
#<==>
echo "file.txt" | xargs echo

"作为输出的内容" 和 "作为参数"的示例

# 测试文件
echo "file content" > file.txt

#测试代码
# 【作为输出内容】输出 file.txt 不是文件内容, 
echo "file.txt" | cat  
echo "file.txt" | cat -

# 【作为参数】
echo "file.txt" | xargs  cat
echo "file.txt" | xargs  cat -

xargs 的示例

# 使用i参数 , 符号{} 作为 参数的替换符号。
find /etc -maxdepth 1 -name "*.conf"  | xargs -i  grep "hostname" -l {}
find /etc -maxdepth 1 -name "*.conf"  -exec  grep "hostname" -l {} \;
# 推荐使用大写的I,这样更灵活比如,可以指定用什么符号替换
# 过命令中有{}那就必须用I
find /etc -maxdepth 1 -name "*.conf"  | xargs -I@  grep "hostname" -l @

# 默认把换行和空白一起处理, 1,2,3中间有空格,456没有
cat <<eof>a.txt
> 1 2 3
> 456
> eof

cat a.txt  | xargs # 输出 1 2 3 456 四个参数

# 一行输出4个
echo "1 2 3 4 5 6 " | xargs -n4
1 2 3 4
5 6

# 使用4作为定界符
echo "1 2 3 4 5 6 " | xargs  -d4

发表评论

邮箱地址不会被公开。