1.tee(双向重定向)
管道符或者“>”操作符都是单向的数据流,为了在数据流处理的国中将某段信息保存到文件,同时希望这个数据流继续输出到后续的命令,那么tee就是为了完成这样的工作情景。
tee相当于一个分流器,将数据流分送到文件和stdout。
这个命令的选项也很简单,-a是用来指定以追加的方式写入到文件,-i选项用来指定写入文件时忽略外部中断的信号。
user@ubuntu:~$ echo "test" | tee -a test.bak | tr -d 't'
es
上述命令会生成一个test.bak的文件保留了“test”内容。如果指定的文件名是“-”,那么也会拷贝内容到stdout,从而输出两份内容。
2.tr
tr是一个非常有效和简洁的替换工具,同时支持POSIX中的字符集。
常用的除了指定替换字符串外,-c选项可以从反面来指定,替换补集。另外-d选项用来直接删除指定的字符,-s选项用来压缩连续字符串为一个。-t选项则用来将SET1的长度匹配到SET2的长度。
比较重要的是支持的字符集和转义字符:
前面很多地方使用了这个命令。它只能从标准输入接收数据,不能从参数接收输入。
user@ubuntu:~$ echo "test" | tr -d 't'
es
user@ubuntu:~$ echo "test" | tr 'a-z' 'A-Z'
TEST
user@ubuntu:~$ echo "test" | tr -c 't' '#'
t##t
user@ubuntu:~$ echo "aaaaaaaaaabbbbbbbbbb" | tr -s 'ab'
ab
user@ubuntu:~$ echo "test" | tr [:lower:] [:upper:]
TEST
3.join
join命令将两个文件进行合并,输出到stdout。
user@ubuntu:~$ join -t ':' /etc/passwd /etc/shadow
root:x:0:0root:/root:/bin/bash:$1/xxxxxxxxxxxxxx::::::
...
可以使用-1和-2选项指定两个文件进行合并时的字段位置。
user@ubuntu:~$ join -t ':' -1 4 /etc/passwd -2 3 /etc/group
0:root:x:0:0root:/root:/bin/bash:root:x:root
...
4.paste
直接将两个文件的每一行粘贴起来,中间默认以tab键分割。
选项-d指定连接行的分割字符。默认为tab键。-s指定按照顺序进行粘贴,默认为并行操作。如果输入的文件为“-”,那么会从stdin读取。
user@ubuntu:~$ paste /etc/passwd /etc/shadow
bin:x:0:0:bin:/bin:/bin/bash bin:*:14121:0:999999:7:::
...
5.expand、unexpand
这个命令的功能很简单,就是将tab键转换为空格,可以指定一个tab键由多少个空格替代。
-t可以指定一个tab键替换的空格个数,也可以使用逗号分隔的列表指定位置。-i能够将费空格字符后的tab不进行替换。
user@ubuntu:~$ echo "test test"| expand -t 2
test test
user@ubuntu:~$ echo "test test"| expand -t 4
test test
user@ubuntu:~$ echo "test test"| expand -t 4 -i
test(tab)test
unexpand与expand正好相反,将空格替换为tab键。