天天看点

Linux下五个字符转换命令:tr,col,join,paste,expand

Linux中常用的字符转换命令有:tr,col,join,paste,expand。

(1)tr:可以用来删除一段信息当中的文字,或者是进行文字信息的转换。

    a) tr 'SET1' 'SET2' tr的默认操作是替换, 作用是把标准输入中含有的SET1中的字符依次换成SET2中对应的字符。

例如:echo "Hello, Kevin" | tr 'a-z' 'A-Z'

输出结果是:HELLO,KEVIN

例如:echo "Hello, Kevin" | tr 'he' 'XX'

输出结果是:HXllo, KXvin

b) tr -d SET1 当tr带有-d参数的时候表示删除标准输入中所有在SET1 中出现的字符。

例如:echo “Hello, Kevin” | tr -d 'a-z'

输出结果是:H, K上述语句的作用就是删除了标准输入中的所有小写字母。

c) tr -s SET1 当tr带有-s参数的时候表示替换掉标准输入中在SET1中重复出现的字符,只保留一个。

例如: echo "Hello, Kevin" | tr -s 'a-z'

输出结果是:Helo, Kevin 结果中删除重复出现的l只保留了一个。

(2) col:在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。

   a)col -b 过滤掉所有的控制字符,包括RLF和HRLF。

   b)col -x 将tab建换成对等的空格键

(3)join: 它处理两个文件之间的数据,主要是将两个文件中有相同数据的行合并在一起。要注意的是在使用join之前,索要处理的两个文件应当是经过排序的,否则有些对比的项目会被略过。

-t:分段的分隔符。 join默认以空格符分隔数据,并且对比“第一个字段”的数据,如果两个文件相同,则将两条数据连城一行,且第一个字段放在第一个。

-i: 忽略大小写的差异。

-1: 数字1后面代表的是第一个文件用哪个字段来分析

      -2:数字2后面代表的是第二个文件用哪个字段来分析

例如:test1中有如下数据:

Kevin 100
Luna 100
Max 100
John 100
           

test2中有如下数据:

Luna 10
John 20
Max 30
Kevin 40
           

分别将test1和test2排序并保存在test1_s和test2_s中,然后用join对两个文件进行处理:join test1 test2 获得以下结果:

John 120
Kevin 140
Luna 110
Max 130
           

(4)paste: 直接将两个文件中具有相同数据的行贴在一起,且中间以tab建隔开。

-d: 后面可以接分隔符,默认是以tab来分隔的

- :如果file部分写成-,表示数据来自stdin

还是按照上面的例子对于排序后的test1_s和test2_s用paste进行处理 paste -d ' ' test1_s test2_s将获得以下结果:

John 100 John 20
Kevin 100 Kevin 40
Luna 100 Luna 10
Max 100 Max 30
           

(5)expand: 将tab转换成空格键。

-t : 后面可以接数字,自定义一个tab按键代表多少个字符。

继续阅读