Shell脚本第三篇
01
#xargs 命令
02
03
#将多行输入转换成单行输出
04
cat example.txt | xargs
05
06
#将单行输入转换多行输出
07
cat example.txt | xargs -n 3
08
09
#自定义分割符号 类似函数 PHP explode JS split
10
echo "splitXsplitXsplitXsplitXsplitX" | xargs -d X
11
12
#结合使用
13
echo "splitXsplitXsplitXsplitXsplitX" | xargs -d X -n 2
14
15
#shell模式 模拟传递可变参数给shell脚本
16
#!/bin/bash
17
#file ceche.sh
18
echo $*'#'
19
20
echo args.txt
21
args1
22
args2
23
args3
24
25
cat args.txt | xargs -n 2 ./cecho.sh
26
args1 args2
27
args3 args4
28
29
# xargs有个选项 -I 可以提供上面这种形式的命令执行序列,我们可以用_I指定一个替换字符串,这个字符串在xargs扩展时会被替换掉。当 -I 与xargs结合使用时对于每个参数都会被执行一次
30
31
cat args.txt | xargs -I {} ./cecho.sh -p {} -l
32
33
# -I {} 指定了替换字符串,对于每一个命令参数,字符串{} 会被从stdin读取的参数所替换, 使用-i的时候,命令就似乎在一个循环中执行一样,如果有三个参数,那么命令会被执行3次,而 {} 在每次执行中都会被替换为相应的参数
34
35
#xargs 与find 结合
36
37
find . -type f -name "*.txt" -print | xargs rm -f
38
#这条命令相当危险,我们无法预知find 找到的文件定界符是'/n' 还是' ' 很多文件名中包含空格符,而xargs 很可能会误认为是他们的定界符,例如 hell text.txt 会被认为hell text.txt
39
40
#tr 命令
41
42
#它可以讲一组字符串变成另一组字符串,因而通常被称为转换命令
43
44
echo "HELLO" | tr 'A-Z' 'a-z' # 把大写字母转小写
45
46
echo 12345 | tr '0-9' '9876543210' #简单的一种加密方式 tr 支持自定义集合方式
47
48
echo 87654 | tr '987654321' '0-9' #解密
49
50
# 用tr删除字符
51
echo 'Hello 123" | tr -d '0-9' #删除0-9数字字符
52
53
#字符集补集
54
echo hello 1 char 2 netxt 4 | tr -d -c '0-9 /n' # 删除除 0-9 /n 以外的所有字符
55
56
#压缩字符 压缩连续的空白字符
57
echo " GNU is not UNIX . recursive right ? " | tr -s ' '
58
59
# 将文本中每一行数相加
60
cat file.txt
61
1
62
2
63
3
64
cat file.txt | echo $[ $(tr '/n' '+' ) 0 ]
65
# 我们用+替代/n 符号,字符串变为 1+ 2+ 3 +
66
# 后面补 0 就是组成一个表达式
67
$ [ operation] # 执行运算符,因此得到下面字符串
68
echo $ [ 1+ 2 + 3 + 0 ]
69
70
# tr 支持的字符类
71
alnum: 字母和数字
72
alpha: 字母
73
cntrl: 控制字符,非打印字符
74
digit: 数字
75
graph: 图形字符
76
lower 小写字母
77
print 可打印字符
78
punct 标点符号
79
space 空白字符
80
upper 大写字母
81
xdigit 十六进制字符
82
83
#使用方法
84
echo 'TESt' | tr [:lower:] [:upper:]