SHELL命令之 xargs

xargs

xargs 可以将标准输入数据或文本内容转换成命令行参数。 能处理stdin并将其转换成特定命令的命令行参数,可以将单行或多行文本输入转换成其他格式。

xargs命令应该紧跟在管道操作符之后。它以标准输入作为主要的源数据流,并使用stdin和通过提供命令行参数来执行其他命令
command | xargs

将多行输入转换成单行输出

将换行符(’’\n)转换成空格“ ”

cat 1.txt
1 2 3
4 5 6
7 8 9 
cat 1.txt | xargs
1 2 3 4 5 6 7 8 9

将单行输入转换成多行输出

cat 1.txt
1 2 3 4 5 6 7 8 9
cat 1.txt | xargs -n 3
1 2 3
4 5 6 
7 8 9

自定义输入界定符

cat 1.txt
argv1kargv2kargv3
cat 1.txt | xargs -d k
argv1 argv2 argv3
cat 1.txt | xargs -d k -n 1
argv1
argv2
argv3

读取文本提供参数

cat 1.txt  | xargs -d k -n 1 ./cecho.sh 
argv1 #
argv2 #
argv3 #
cat 1.txt  | xargs -d k -n 3 ./cecho.sh 
argv1 argv2 argv3 #

替换指定参数

./cecho.sh -p arg1 -1
-p arg1 -1 #

cat 1.txt  | xargs -d k -n 3 -I {} ./cecho.sh -p {} -1
-p argv1 -1 #
-p argv2 -1 #
-p argv3 -1 #
cat 1.txt  | xargs -d k -n 1 -I {} ./cecho.sh -p {} -1
-p argv1 -1 #
-p argv2 -1 #
-p argv3 -1 #  # 加了-I 1和3 是一样的效果  每次只替换一个参数

结合find

 ls
 1.txt   f  'f test.txt'   test
 find . -type f -name "*.txt" -print | xargs
./1.txt ./f test.txt
find . -type f -name "*.txt" -print | xargs rm -f
 ls
'f test.txt'   test

当文件命中有空格时 可能会导致误操作 xargs 可能分不清定界符时’\n‘还是’\0‘
导致将文件’f test.txt’ 识别为 f和test.txt

指定定界符解决问题

ls
 1.txt   f  'f test.txt'   test
find . -type f -name "*.txt" -print0 | xargs -0 rm -f 
ls
f  test

结合stdin 巧妙运用while语句和子shell

ls
1.txt  aegv1  argv1  argv2  argv3  f  test
cat 1.txt  | ( while read arg; do cat $arg; done )
cat: argv1: 是一个目录
cat: argv2: 是一个目录
cat: argv3: 是一个目录
cat 1.txt | xargs -n 1 -I {} cat {}
cat: 'argv1 argv2 argv3': 没有那个文件或目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值