字符转换命令
1. tr⚓
2. col⚓
col [options]
OPTIONS
-x, --spaces convert tabs to spaces
-h, --tabs convert spaces to tabs
[sink@dev vitest]$ cat man_db.conf | col -x | cat -A
3. join⚓
join [OPTION]... FILE1 FILE2
将两个文件合并
OPTION
-i, --ignore-case 忽略大小写
-t CHAR 指定输入输出的分隔符(默认是空格)
-1 FIELD 根据 file 1 的这个域来合并
-2 FIELD 根据 file 2 的这个域来合并
-j FIELD equivalent to '-1 FIELD -2 FIELD'
[root@dev vitest]# head -n 3 /etc/passwd /etc/shadow
==> /etc/passwd <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
==> /etc/shadow <==
root:$6$dEmXqJj8IH07TF97$sD08U6KQTP.Y.2Wr.Fe27m.b7Hq4M0LjIgeNoLI5GYU1e/qvaT/bxWxgF5F8tz5O.Zd4KayZfvnBae/hV2QbA1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
[root@dev vitest]# join -t ':' /etc/passwd /etc/shadow | head -n 3
root:x:0:0:root:/root:/bin/bash:$6$dEmXqJj8IH07TF97$sD08U6KQTP.Y.2Wr.Fe27m.b7Hq4M0LjIgeNoLI5GYU1e/qvaT/bxWxgF5F8tz5O.Zd4KayZfvnBae/hV2QbA1::0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:17110:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:17110:0:99999:7:::
[root@dev vitest]# head -n 3 /etc/passwd /etc/group
==> /etc/passwd <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
==> /etc/group <==
root:x:0:
bin:x:1:
daemon:x:2:
[root@dev vitest]# join -t ':' -j 3 /etc/passwd /etc/group | head -n 3
0:root:x:0:root:/root:/bin/bash:root:x:
1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:
2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:
Note
在使用 join 之前, 你所需要处理的文件应该要事先经过排序(sort)处理!否则有些比对的项目会被略过。
4. paste⚓
paste [OPTION]... [FILE]...
单纯地将多个文件的行合并起来
-d, --delimiters=LIST 指定分隔符,默认是 TABs
-s 一次粘贴一个文件,而不是并行粘贴
- 从标准输入读取
[root@dev vitest]# cat /etc/passwd | paste /etc/shadow /etc/group - | head -n 3
root:$6$dEmXqJj8IH07TF97$sD08U6KQTP.Y.2Wr.Fe27m.b7Hq4M0LjIgeNoLI5GYU1e/qvaT/bxWxgF5F8tz5O.Zd4KayZfvnBae/hV2QbA1::0:99999:7::: root:x:0: root:x:0:0:root:/root:/bin/bash
bin:*:17110:0:99999:7::: bin:x:1: bin:x:1:1:bin:/bin:/sbin/nologin
daemon:*:17110:0:99999:7::: daemon:x:2: daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@dev vitest]# head num1 num2
==> num1 <==
1
2
3
==> num2 <==
4
5
6
[root@dev vitest]# paste num1 num2
1 4
2 5
3 6
[root@dev vitest]# paste -s num1 num2
1 2 3
4 5 6
5. expand⚓
expand [OPTION]... [FILE]...
把每个文件中的 tabs 转为空格
-t, --tabs=NUMBER 指定空格的长度,默认是 8
- 从标准输入读取
[root@dev vitest]# cat -A num1; expand num1 | cat -A
1^I1.1$
2^I2.2$
3^I3.3$
1 1.1$
2 2.2$
3 3.3$
与之相反的是unexpand指令
# 有点奇怪,明明只有4个空格,却要使用5来指定宽度???
[root@dev vitest]# cat -A num2; echo '---------'; unexpand -t 5 num2 | cat -A
4 4.4$
5 5.5$
6 6.6$
---------
4^I4.4$
5^I5.5$
6^I6.6$