Linux命令(11)——字符转换命令:tr、col、join、paste、expand

来源:互联网 发布:php调用json接口 编辑:程序博客网 时间:2024/04/30 19:25

1.tr命令

1.1功能

tr可以用来转换或者删除一段文字。tr是translate(转换的缩写),tr的功能英文示意是:translate or delete characters。tr所有的功能均可由sed来完成,可以将tr视为sed一个极简的实现。

1.2格式

tr [-dsc] <character set1> <character set2>

1.3选项

-c,-C,--complement:将字符集<character set1>以外的其他字符删除或者转换为字符集<character set2>中的最后一个字符(如果你指定了多个字符的话)。见示例6-d,--delete:删除信息当中的SET1这个字符串。-s,--squeeze-repeats:压缩重复的字符,只保留一个。--help:显示帮助信息。--version:显示版本信息。

1.4示例

(1)将last输出的信息中所有小写的字符变成大写字符。

last|tr '[a-z]' '[A-Z]'//或者last|tr [a-z] [A-Z]

(2)将/etc/passwd输出的信息中的冒号:删除。

cat /etc/passwd | tr -d ':'

(3)将dos文件转成unix文件。

cat /etc/passwd | tr -d '\r'

(4)删除空行

cat file | tr -s "\n" > new_file

(5)将文件file中出现的”abc”替换为”xyz”。

cat file | tr "abc" "xyz" > new_file

注意:这里凡是在file中出现的”a”字母,都替换成”x”字母,”b”字母替换为”y”字母,”c”字母替换为”z”字母,而不是将字符串”abc”替换为字符串”xyz”。

(6)删除和替换指定字符集以外的字符。

//替换指定字符集以外的字符[b3335@MIC ~]$ echo alv blv|tr -c 'lv ' "x"xlv xlvx//删除指定字符集以外的字符[b3335@MIC ~]$ echo alv blv|tr -cd 'lv'lvlv

2.col命令

2.1功能

标准输入文本过滤器,它从标注输入设备读取文本内容,并把内容显示到标注输出设备。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符>和>>,把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符。

col是control中co和l的拼接。

2.2格式

col [-bfpx] [-l num]

2.3选项说明

-b:过滤所有的控制字符,包括RLFHRLF-f:过滤RLF字符,但忽略HRLF字符-p:强制不转换未识别的控制符-x:以空格来代替制表符Tab-l <缓冲区大小>:设置缓冲区大小,默认缓冲区为128行。

RLF字符(reverse line feed)是反向换行符,HRLF字符(half-reverse line feed)是半反向换行符。百度知道中有网友的回答,但是我还是不太清楚这两个字符的作用和应用场景,请知道的大牛评论告知,万分感谢。

示例:
(1)将Tab替换成空格。

col -x testfile

(2)将帮助文档内的控制符删除。以col命令的帮助文档为例。

man col|col -b>newFile

3.join命令

3.1功能

将两个文件,按照指定的相同字段进行笛卡尔乘积横向拼接,并输出到标准输出。默认情况下,join字段分隔符是空格。此外,join时,两个文件需要按照某个字段排好序。

3.2格式

join <选项> <file1> <file2>

当file1或者file2是-(二者不能同时是-),那么从标准输入读取。

3.3选项说明

-a<12>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。-e <字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。-i:--igore-case,比较栏位内容时,忽略大小写的差异。-o <格式>:按照指定的格式来显示结果。-t <字符>:使用栏位的分隔字符。-v<12>:跟-a相同,但是只显示文件中没有相同栏位的行。-1 <栏位>:连接[文件1]指定的栏位。-2 <栏位>:连接[文件2]指定的栏位。--help 显示帮助。--version 显示版本信息。

3.4示例

(1)连接两个文件,默认以第一列作为连接字段。

file1内容如下:lvlv dablelv 25zhangsan San 12file2内容如下:lvlv english 15lvlv math 75zhangsan math 14zhouxun english 45[b3335@MIC test]$ join file1 file2lvlv dablelv 25 english 15lvlv dablelv 25 math 75zhangsan San 12 math 14

(2)还是以上面的两个文件为例,显示指明按照第一列英文名进行连接。

[b3335@MIC test]$ join -1 1 -2 1 file1 file2

(3)如果想显示没有相同字段的行,使用-a1或-a2指定显示第一个或者第二个文件的行。

[b3335@MIC test]$ join -a2 file1 file2lvlv dablelv 25 english 15lvlv dablelv 25 math 75zhangsan San 12 math 14zhouxun english 45          //显示了文件file2中未匹配的一行

4paste命令

4.1功能

用于横向拼接多个文件,并将合并结果输出到标准输出。把每个文件以行为单位,默认以Tab键分隔加以合并。paste后可接多个文件,不限于2个文件。如果文件写成“-”,表示来自标准输入。paste相对于join来说,简单许多,不需要有相同的字段才能按行连接。

4.2格式

pasete [选项] [file1 ...]

4.3选项说明

-d <分隔符>,--delimiters=<间隔字符>:用指定的间隔字符取代Tab-s,--serial:顺序地合并一个文件的多行到一行。--help:显示帮助信息。--version:显示版本。

4.4示例

(1)将文件的所有行合并到一行。

paste -s file1

(2)合并两个文件,比如将/etc/passwd与/etc/shadow同一行连接在一起,默认以Tab分隔。

[b3335@MIC test]$ paste /etc/passwd /etc/shadowbin:x:1:1:bin:/bin:/sbin/nologin    bin:*:15615:0:99999:7:::daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:15615:0:99999:7:::adm:x:3:4:adm:/var/adm:/sbin/nologin    adm:*:15615:0:99999:7:::

5.expand命令

5.1功能

用于将文件的制表符(TAB)转换为空格符(space),默认一个Tab对应8个空格符,并将结果输出到标准输出。若不指定任何文件名或所给文件名为”-“,则expand会从标准输入读取数据。

5.2格式

expand [选项] [file]

5.3选项说明

-i, --initial:不转换非空白符后的制表符。(暂未了解具体用法,知悉者请留言告知,万分感谢)-t <数字>,--tabs=NUMBER:指定一个tab替换为多少个空格,而不是默认的8-t <Tab位置列表>, --tables=LIST:指定制表符位置列表,用逗号分隔--help:显示帮助信息--version:输出版本信息

5.4示例

(1)将文件内的每一个tab制表符替换为6个空格符。

expand -t 6 file

了解expand命令,与之相反的命令是unexpand,就是将空白转成tab制表符,这里不多描述,有兴趣者可以进一步了解一下。


参考文献

[1]man tr
[2]man col
[3]man join
[4]man paste
[5]man expand

阅读全文
1 0
原创粉丝点击