本文首发于我的公众号码农之屋(id: Spider1818),专注于干货分享,包含但不限于Java编程、网络技术、Linux内核及实操、容器技术等。欢迎大家关注,二维码文末可以扫。
1 col简介
当我们使用shell命令">"和">>"将UNIX说明文件转为纯文本文件时,控制字符会变成乱码,col命令可以有效滤除这些控制字符。
1.1 命令格式
col [option] [-l num]
1.2 col常用option
option | 说明 |
-b | 过滤所有控制字符,在每列位置只打印最后写的字符 |
-f | 将处于半行分界线的字符打印在下一行 |
-p | 不过滤未识别的控制符 |
-x | 以空格代替Tab控制符 |
-l[缓冲区大小] | 设置缓冲区大小,默认为128行 |
备注:关于col命令的详细信息请执行man col命令查询。
1.3 col示例
示例文本信息:
root@LTY:/opt# cat -A test.txt
test^I$
1)用空格替代Tab控制符("^I "),输出test.txt的内容
root@LTY:/opt # cat test.txt | col -x | cat -A
test$
2 tr简介
tr命令用于转换或删除字符,可将其当成为sed的简单版。
2.1 命令格式
tr [option]... set1 [set2]
2.2 tr常用option
option | 说明 |
-c | 取set1指定字符的补集 |
-d | 删除set1指定的字符,不涉及set2 |
-s | 将set1指定连续重复的字符用单字符替代 |
-t | 将set2的字符替换set1的字符,多出不替换 |
NA | 不带参数时,将set2的每个字符替换set1的每个字符,如果set1字符长度大于set2,则将set1多出来的字符用set2最后的字符替换 |
备注:关于字符集合内容在此不进行展示,想了解详细内容请执行man tr进行查询。
2.3 col示例
示例文本信息:
root@LTY:/opt# cat test.txt
aaBBccDDeeFFgg
1)不带参数将set2的字符替换set1字符
root@LTY:/opt # cat test.txt | tr "aBc" "12"
112222DDeeFFgg
2)用set2字符替换set1字符
root@LTY:/opt # cat test.txt | tr -t "aBc" "12"
1122ccDDeeFFgg
3)删除所有小写字符
root@LTY:/opt # cat test.txt | tr -d "a-z"
BBDDFF
4)将连续重复的字符用单字符替代
root@LTY:/opt # cat test.txt | tr -s "a-zA-Z"
aBcDeFg
5)取数据流中SET1中指定字符的补集
root@LTY:/opt # cat test.txt | tr -d -c "a-z\n"
aacceegg
3 join简介
join命令用于将两文件指定栏位相同的行连接起来,即按照两文件共同拥有的某一列,将对应的行拼接成一行。
3.1 命令格式
join [option] file1 file2
3.2 join常用option
option | 说明 |
-a<1或2> | 除显示相同栏位的行之外,还显示指定文件中不相同栏位的行 |
-i | 比较栏位内容时,忽略大小写 |
-v<1或2> | 不显示相同栏位的行,只显示指定文件中不相同栏位的行 |
-t<字符> | 使用指定的分隔符 |
-1<栏位> | 连接文件1指定的栏位 |
-2<栏位> | 连接文件2指定的栏位 |
备注:想了解其他option请执行man join进行查询。
3.3 col示例
示例文本信息:
root@LTY:/opt # cat test1.txt
1 a
2 b
3 c
4 d
5 test
root@LTY:/opt# cat test2.txt
1A
2B
3C
4D
6test
1)第一行作为匹配字段,将test1和test2相同行连接起来
root@LTY:/opt # join test1.txt test2.txt
1 a A
2 b B
3 c C
4 d D
2)第一行作为匹配字段,将test1和test2相同行连接起来,同时显示test1未被连接的行
root@LTY:/opt # join -a 1 test1.txt test2.txt
1 a A
2 b B
3 c C
4 d D
5 test
3)第一行作为匹配字段,显示test1未被连接的行
root@LTY:/opt # join -v 1 test1.txt test2.txt
5 test
4)将连续重复的字符用单字符替代
root@LTY:/opt # join -t " " test1.txt test2.txt
1 a A
2 b B
3 c C
4 d D
我的公众号「码农之屋」(id: Spider1818) ,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。