Xargs

xargs 紧跟在管道操作符之后,它使用标准输入作为主要的数据源

例如:ls *.c | xargs grep main

xargs 默认会执行echo命令

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

cat example.txt | xargs

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

cat example.txt | xargs -n 3

xargs 工作原理:xargs命令接受来自stdin的输入,将数据解析成单个元素,然后调用指定命令并将这些元素作为该命令的参数。xargs默认使用空白字符分割输入并执行/bin/echo

-d 指定分割符

例如:echo "splitXsplit2Xsplit3Xsplit4X" | xargs -d X

-n 指定输出行数

echo "splitXsplit2Xsplit3Xsplit4X" | xargs -d X -n 2

-I 用于指定替换字符串

cat args.txt | xargs -I {} ./cecho.sh -p {} -l

3.结合find使用xargs

危险示例:find . -type f -name "*.txt" -print | xargs rm -f

以'\n',' '为分割,当文件名中有空格时,容易删错文件

正确示例:find . -type f -name "*.txt" -print0 | xargs -0 rm -f 

以'\0'--空字符为作为分割符。

4.统计源代码目录中所有C程序文件的行数

find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l

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

$ cat files.txt | ( while read arg; do cat $arg; done )

# 等同于cat files.txt | xargs -I {} cat {}

cmd0 | ( cmd1;cmd2;cmd3 ) | cmd4

如果cmd1 是 cd /,那么就会改变子shell工作目录,然而这种改变仅局限于该子shell内部,cmd4 者不受影响

shell的-c选项可以调用子shell来执行命令行脚本,它可以与xargs结合解决多次替换的问题。

例如:find . -name '*.c' | xargs -I ^ sh -c "echo -ne '\n ^: '; grep main ^"

 

转载于:https://www.cnblogs.com/HHPy/p/9689775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值