外部过滤器,程序和命令--复杂命令


find

  -exec COMMAND \;
  在每一个find匹配到的文件执行COMMAND命令. 命令序列以;结束(“;”是转移以保证shell传递到find命令中的字符不会被解释为其他的特殊字符).

bash$ find ~/ -name '*.txt'
/home/liudezhi/.kde/share/apps/karm/karmdata.txt
/home/liudezhi/misc/irmeyc.txt
/home/liudezhi/test-scripts/1.txt

  如果COMMAND中包含{},那么find命令将会用所有匹配文件的路径名来替换”{}”.

find ~/ -name 'core*' -exec rm {} \;
# 从用户的home目录中删除所有的 core dump文件.

xargs

  这是给命令传递参数的一个过滤器, 也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块, 以方便过滤器和命令进行处理.由此这个命令也是后置引用的一个强有力的替换. 当在一般情况下使用过多参数的命令替换都会产生失败的现象, 这时候使用xargs命令来替换, 一般都能成功.一般的, xargs从 stdin 或者管道中读取数据, 但是它也能够从文件的输出中读取数据.

  xargs的默认命令是echo. 这意味着通过管道传递给xargs的输入将会包含换行和空白, 不过通过xargs的处理, 换行和空白将被空格取代.

bash$ ls -l
total 0
-rw-rw-r-- 1 liudezhi liudezhi 0 Aug 18 18:11 file1
-rw-rw-r-- 1 liudezhi liudezhi 0 Aug 18 18:11 file2

bash$ ls -l | xargs
total 0 -rw-rw-r-- 1 liudezhi liudezhi 0 Aug 18 18:11 file1 -rw-rw-r-- 1 liudezhi liudezhi 0 Aug 18 18:11 file2

bash$ find ~/mail -type f | xargs grep "Linux"
./misc:User-Agent: slrn/0.9.8.1 (Linux)
...

  ls | xargs -p -l gzip 使用gzips压缩当前目录下的每个文件, 每次压缩一个, 并且在每次压缩前都提示用户.

  *一个有趣的xargs选项是-n NN, NN用来限制每次传递进来的参数的个数.

  *一个有用的选项是 -0 , 使用find -print0grep -lZ这两种组合方式. 这允许处理包含空白或引号的参数.

find / -type f -print0 | xargs -O grep -liwz GUI | xargs -O rm -f
grep -rliwz GUI /  | xargs -O rm -f

上面两行都可以用来删除任何包含”GUI”的文件.


expr

  通用求值表达式: 通过给定的操作(参数必须以空格分开)连接参数, 并对参数求值. 可以使算术操作, 比较操作, 字符串操作或者是逻辑操作.

expr 3 + 5                      # return 8
expr 5 % 3                      # return 2
expr 1 / 0                      # return expr: 除以零.(不允许非法的算术操作.)
expr 5 \* 3                     # return 15(*在算术表达式expr中使用乘法操作时, 乘法符号必须被转义.)
expr `expr 5 * 3`               # expr:syntax error.
y=`expr $y + 1`                # 增加变量的值, 与 lety=y+1 和 y=$(($y+1)) 的效果相同.
z=`expr substr $string $position $length`        # 在位置$position上提取$length长度的子串.

  : 操作可以替换match命令. 比如,b=`expr $a : [0-9]*`与b=`expr match $a [0-9]*`完全等价.

  Perl, sed, 和awk是更强大的字符串分析工具. 在脚本中加入一段比较短的sed或者awk”子程序”, 比使用expr更有吸引力.
  
  
  
  
  
  
  
  
  
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值