一、tr 命令
tr (translate) 命令可以对来自标准输入的字符进行替换、压缩和删除操作。
语法
tr [option] string1 string2
选项
tr string1 string2
:将标准输入中所有属于 string1 的字符替换为 string2 中的字符
-d
:删除标准输入中所有属于 string1 的字符
-s
:把标准输入中连续的重复字符压缩成一个字符显示
-c
:取代或删除标准输入中所有不属于 string1 的字符
示例
# 替换指定字符
$ echo "hello world" | tr 'h' 'H'
Hello world
# 删除指定字符(数字和空格)
$ echo "hello 12345 world" | tr -d '0-9 '
helloworld
# 压缩指定字符
$ echo "heeeeeeeeello world" | tr -s 'e'
hello world
# 字符集补集
$ echo "hello 12345 world" | tr -c -d '0-9'
12345
字符集格式(string1 / string2)
字符集合(即命令参数中的 string1 和 string2)用于指定需要替换或删除的字符。'A-Za-z'
、'A-F0-9'
、'}.\t'
等都是合法的字符集合。
字符 | 含义 |
---|---|
\b | 退格符 |
\n | 新行 |
\r | 回车符 |
\t | Tab 符 |
CHAR1-CHAR2 | 从 CHAR1 到 CHAR2 的所有字符(按 ASCII 字符顺序) |
[:alnum:] | 所有字母和数字 |
[:alpha:] | 所有字母 |
[:blank:] | 所有空格和 Tab 字符 |
[:cntrl:] | 所有控制字符 |
[:graph:] | 所有可打印字符,不包括空格 |
[:lower:] | 所有小写字符 |
[:punct:] | 所有标点符号 |
[:space:] | 所有横向或纵向的空白字符 |
[:upper:] | 所有大写字符 |
二、cut 命令
cut
命令用于切割并筛选文本行中的指定部分,其操作对象可以是一个或多个文件,如未指定文件选项或该选项为 "-",则从标准输入中读取需要操作的内容。
语法
cut
其中 list 选项为由逗号分隔的数字或 "-" 号连接的数字范围,用于指定文本行中需要显示的字段。
- N-:从第 N 个字节、字符、字段到结尾
- N-M:从第 N 个字节、字符、字段到第 M 个(包括 M 在内)
- -M:从第 1 个字节、字符、字段到第 M 个(包括 M 在内)
选项
-b list
:list 选项指定的是 byte 的范围
-c list
:list 选项指定的是字符的范围
-d
:指定字段的分隔符,默认是 Tab
-f list
:list 选项指定的是字段的范围
示例
用于演示的文件内容如下:
$ cat students.txt
No Name Mark
01 rose 69
02 jack 71
03 alex 68
使用 -f 选项提取指定字段
$ cut -f 2,3 students.txt
Name Mark
rose 69
jack 71
alex 68
使用 -d 选项指定字段分隔符
$ cat students2.txt
No,Name,Mark
01,rose,69
02,jack,71
03,alex,68
$ cut -f 2,3 -d "," students2.txt
Name,Mark
rose,69
jack,71
alex,68
使用 -c 选项提取指定字符范围里的内容
$ cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
$ cut -c -5 test.txt
abcde
abcde
abcde
$ cut -c 5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
三、sort 命令
sort
命令用于将文件内容进行排序,并将排序结果打印到标准输出。它将文件的每一行文本视为一个单位,从首字母向后,依次按该字母的 ASCII 码值进行比较,并按升序输出。
选项
-b
:忽略每行行首的空格字符
-c
:检查文件是否已按顺序排序
-d
:排序时,只考虑字母、空格和数字,忽略其它字符
-f
:排序时,将小写字母视为大写字母(即忽略大小写)
-i
:排序时,忽略所有非打印字符
-M
:将前面三个字母按月份的缩写进行排序
-n
:按照数值的大小进行排序
-o
:将排序好的结果输出到指定文件中
-r
:以相反的顺序输出排序后的结果
-t
:指定排序时使用的栏位分隔符
-u
:合并显示内容相同的行
示例
用于演示的文件内容如下:
$ cat sort.txt
AAA:BB
aaa:4
ccc:10
bbb:20
bbb:8
简单排序
$ sort sort.txt
AAA:BB
aaa:4
bbb:20
bbb:8
ccc:10
按照 BB 列的数字由大到小排序
$ sort -nr -t: -k2 sort.txt
bbb:20
ccc:10
bbb:8
aaa:4
AAA:BB
# -n 表示按照数字大小排序,-r 表示反向排序
# -t: 表示冒号作为栏位分隔符,-k2 表示第二栏(即 BB 列)作为排序依据
四、uniq 命令
uniq
命令用于报告或过滤文件中内容重复的行
选项
-c
:在每行输出内容的行首加上该行重复的次数
-d
:仅显示内容重复的行
-u
:仅显示内容未重复的行
-f
:不比较指定的栏位
-s
:不比较指定的字符
示例
# 源文件
$ cat uniq.txt
helloworld
helloworld
helloshell
hellotext
# 删除重复行
$ uniq uniq.txt
helloworld
helloshell
hellotext
# 只显示未重复的内容
$ uniq -u uniq.txt
helloshell
hellotext
# 统计各行出现的次数
$ uniq -c uniq.txt
2 helloworld
1 helloshell
1 hellotext
# 只显示重复行
$ uniq -d uniq.txt
helloworld