xargs
将多行输入转换成单行输出。
$ cat example.txt
123456 7 8 9 10
11 12
# 样例文件
$ cat example.txt | xargs 1 2 3 4 5 6 7 8 9 10 11 12
将单行输入转换成多行输出。 xargs的-n选项可以限制每次调用命令时用到的参数个数。下面的命令将输入分割成多
行,每行N个元素:
$ cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
-d选项可以为输入数据指定自定义的分隔符:
$ echo "splitXsplit2Xsplit3Xsplit4" | xargs -d X
Split1 split2 split3 split4
用–d选项将X定义为 输入分隔符。
结合-n选项,可以将输入分割成多行,每行包含两个单词:
$ echo "splitXsplitXsplitXsplit" | xargs -d X -n 2 split split
split split
使用了grep找出内容中不包含image的文件:
$ find /smbMount -iname '*.docx' -print0 | xargs -0 grep -L image
tr
tr只能通过stdin(标准输入)接收输入(无法通过命令行参数接收)。其调用格式如下:
tr [options] set1 set2
用tr进行数字加密和解密的例子:
$ echo 12345 | tr '0-9' '9876543210'
87654 # 已加密
$ echo 87654 | tr '9876543210' '0-9'
12345 # 已解密
用tr删除字符 tr有一个选项-d,可以通过指定需要被删除的字符集合,将出现在stdin中的特定字符清除掉:
$ cat file.txt | tr -d '[set1]' #只使用set1,不使用set2
例如:
$ echo "Hello 123 world 456" | tr -d '0-9'
Hello world
# 将stdin中的数字删除并打印删除后的结果
字符组补集
我们可以利用选项-c来使用set1的补集。下面的命令中,set2是可选的:
tr -c [set1] [set2]
如果只给出了set1,那么tr会删除所有不在set1中的字符。如果也给出了set2,tr会将不 在set1中的字符转换成set2中的字符。如果使用了-c选项,set1和set2必须都给出。如果-c 与-d选项同时出现,你只能使用set1,其他所有的字符都会被删除。
下面的例子会从输入文本中删除不在补集中的所有字符:
$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 124
接下来的例子会将不在set1中的字符替换成空格:
$ echo hello 1 char 2 next 4 | tr -c '0-9' ' '
124
用tr压缩字符
tr -s '[需要被压缩的一组字符]'
tr可以将不同的字符类作为集合使用
alnum:字母和数字。
alpha:字母。
cntrl:控制(非打印)字符。 digit:数字。
graph:图形字符。
lower:小写字母。
print:可打印字符。
punct:标点符号。
space:空白字符。
upper:大写字母。
xdigit:十六进制字符。
#可以按照下面的方式选择所需的字符类:
tr [:class:] [:class:]
#例如:
tr '[:lower:]' '[:upper:]'