shell常用命令—xargs命令

shell常用命令—xargs命令

1. xargs命令的功能

  • xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具
  • xargs可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据
  • xargs也可以将单行或多行文本输入转换为其他格式(例如多行变单行,单行变多行)
  • xargs默认的命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代

xargs存在的意义:
它能够捕捉一个命令的输出,然后传递给另外一个命令
由于很多命令不支持|管道来传递参数,而日常工作中有这个必要,所以就有了xargs命令

例如:
在这里插入图片描述

2. xargs命令的使用

例1:

cat test.txt | xargs		#规范文件中的内容
cat test.txt | xargs -n3	#-n4指定每行3个字符

在这里插入图片描述
在这里插入图片描述

例2:

echo "nameXnameXnameXname" | xargs -dX		#删除字符D
echo "nameXnameXnameXname" | xargs -dX -n2	#指定每行2个字符

在这里插入图片描述

例3:

echo "one two three"
echo "one two three" | mkdir
echo "one two three" | xargs mkdir
ls

在这里插入图片描述

例4:

扫描二维码关注公众号,回复: 9918266 查看本文章
echo "one two three" | xargs -p touch	       #-p询问是否执行指定动作
touch one two three four ?...		           #不输入yes就不会执行

ls 
test.txt

echo "one two three" | xargs -p touch
touch one two three four ?...yes	          #输入yes才会执行

ls
one  test.txt  three  two

echo "one two three" | xargs -t rm	          #-t不询问 直接执行指定动作
rm one two three

ls 
test.txt

在这里插入图片描述

例5:
xargs默认将空格作为分隔符,不太适合处理文件名(因为文件名可能包含空格)。

find命令有一个特别的参数 -print0,find -print0表示在find的每一个结果之后加一个NULL字符,而不是默认加一个换行符。find的默认在每一个结果后加一个’\n’,所以输出结果是一行一行的。当使用了-print0之后,就变成一行了。

然后xargs -0表示xargs用NULL来作为分隔符。这样前后搭配就不会出现空格和换行符的错误了。选择NULL做分隔符,是因为一般编程语言把NULL作为字符串结束的标志,所以文件名不可能以NULL结尾,这样确保万无一失。

find /etc/ -type f -print0 | xargs -0 ls   

在这里插入图片描述

例6:
如果xargs要将命令行参数传递给多个命令,就要使用 -I 参数

sh -c "echo file;mkdir file"
ls
rm -fr file
vim foo.txt
cat foo.txt | xargs -I name sh -c 'echo name;mkdir name'    #如果xargs要将命令行参数传递给多个命令,就要使用 -I 参数
ls

在这里插入图片描述

在这里插入图片描述

发布了145 篇原创文章 · 获赞 17 · 访问量 8664

猜你喜欢

转载自blog.csdn.net/weixin_45775963/article/details/104388476