第十一章 Linux系统之文件处理基础命令
一、常用文件处理命令-sort
1.含义
sort命令的功能是对文件内容进行排序。有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。
语法格式:sort [参数] 文件
2.常用参数:
-b | 忽略每行前面开始出的空格字符 |
---|---|
-c | 检查文件是否已经按照顺序排序 |
-d | 除字母、数字及空格字符外,忽略其他字符 |
-f | 将小写字母视为大写字母 |
-i | 除040至176之间的ASCII字符外,忽略其他字符 |
-m | 将几个排序号的文件进行合并 |
-M | 将前面3个字母依照月份的缩写进行排序 |
-n | 依照数值的大小排序 |
-o <输出文件> | 将排序后的结果存入制定的文件 |
-r | 以相反的顺序来排序 |
-t <分隔字符> | 指定排序时所用的栏位分隔字符 |
-k | 指定需要排序的栏位 |
3.常用示例
对指定的文件内容按照字母顺序进行排序
[root@jindada ~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@jindada ~]# sort fruit.txt
apple
banana
orange
pear
raspaberry
对指定的文件内容按照数字大小进行排序
[root@jindada ~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@jindada ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98
以冒号(:)为间隔符,对指定的文件内容按照数字大小对第3列进行排序:
[root@jindada ~]# sort -t ":" -nk3 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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
………………省略部分输出信息………………
二、常用文件处理命令-uniq
1.含义
uniq命令来自于英文单词unique的缩写,中文译为独特的、唯一的,其功能是用于去除文件中的重复内容行。uniq命令能够去除掉文件中相邻的重复内容行,如果两端相同内容中间夹杂了其他文本行,则需要先使用sort命令进行排序后再去重复,这样保留下来的内容就都是唯一的了。
语法格式:uniq [参数] 文件
2.常用参数:
-c | 打印每行在文本中重复出现的次数 |
---|---|
-d | 每个重复纪录只出现一次 |
-u | 只显示没有重复的纪录 |
3.常用示例
对指定的文件进行去重操作
[root@jindada ~]# sort file.txt
123
123
123
456
abc
abc
edf
[root@jindada ~]# sort file.txt | uniq
123
456
abc
edf
对指定的文件进行去重操作,打印每行在文本中重复出现的次数
[root@jindada ~]# sort file.txt | uniq -c
3 123
1 456
2 abc
1 edf
对指定的文件进行去重操作,并安装相应的sort参数排序
[root@jindada ~]# sort file.txt | uniq -c | sort
1 456
1 edf
2 abc
3 123
[root@jindada ~]# sort file.txt | uniq -c | sort -n
1 456
1 edf
2 abc
3 123
[root@jindada ~]# sort file.txt | uniq -c | sort -rn
3 123
2 abc
1 edf
1 456
仅显示指定文件中存在一摸一样内容行的信息
[root@jindada ~]# uniq -d testfile
test 30
Hello 95
Linux 85
仅显示指定文件中没有存在一摸一样内容行的信息:
[root@jindada ~]# uniq -u testfile
三、常用文件处理命令-cut
1.含义
cut命令的功能是用于按列提取文件内容。常用的grep命令仅能对关键词进行按行提取过滤,而cut命令则是可以根据指定的关键词信息,针对特定的列内容进行过滤。
语法格式:cut [参数] 文件
2.常用参数:
-c | 以字符为单位进行分割 |
---|---|
-b | 以字节为单位进行分割 |
-d | 自定义分隔符,默认为制表符”TAB” |
-f | 显示指定字段的内容 |
-n | 取消分割多字节字符 |
--complement | 补足被选择的字节、字符或字段 |
--out-delimiter | 指定输出内容是的字段分割符 |
3.常用示例
[root@jindada ~]# echo "root:x:0:0:root:/root:/bin/bash" >test.txt
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
取出第七列
[root@jindada ~]# cut -d ":" -f7 test.txt
/bin/bash
取出第一列和第七列
[root@jindada ~]# cut -d ":" -f1,7 test.txt
root:/bin/bash
取出第五列到第七列
[root@jindada ~]# cut -d ":" -f5-7 test.txt
root:/root:/bin/bash
[root@jindada ~]# cut -d ":" -f7 passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@jindada ~]# cut -d ":" -f7 passwd | sort
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c
1 /bin/bash
1 /bin/sync
1 /sbin/halt
14 /sbin/nologin
1 /sbin/shutdown
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -n
1 /bin/bash
1 /bin/sync
1 /sbin/halt
1 /sbin/shutdown
14 /sbin/nologin
[root@jindada ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn
14 /sbin/nologin
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
1 /bin/bash
取出字符
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@jindada ~]# cut -c 6 test.txt
x
[root@jindada ~]# cut -c 6 passwd
x
:
n
:
4
x
o
x
x
t
#取出不同的字符
[root@jindada ~]# cut -c 6,8 test.txt
x0
#取出连续的字符
[root@jindada ~]# cut -c 1-4 test.txt
root
取出系统eth0的IP地址
[root@jindada ~]# yum install -y net-tools
[root@jindada ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 1634 bytes 464970 (454.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1033 bytes 114568 (111.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@jindada ~]# ifconfig eth0 | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@jindada ~]# ifconfig eth0 | head -2 | tail -1
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@jindada ~]# ifconfig eth0 | head -2 | tail -1 | cut -d " " -f10
10.0.0.100
[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0 | head -3
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -c 10-19
10.0.0.100
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6
10.0.0.100/24
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6 | cut -d "/" -f1
10.0.0.100
四、常用文件处理命令-tr
1.含义
tr命令来自于英文单词transform的缩写,中文译为转换,其功能是用于字符转换。tr命令是一款批量字符转换、压缩、删除的文本工具,但仅能从标准输入中读取文本内容,需要与管道符或输入重定向操作符搭配使用。
语法格式:tr [参数] 字符串1 字符串2
2.常用参数:
-c | 反选字符串1的补集(取反) |
---|---|
-d | 删除字符串1中出现的所有字符 |
-s | 删除所有重复出现的字符序列 |
< | 标准输入重定向 |
3.常用示例
将指定文件中的数字改变输出内容到终端界面
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@jindada ~]# tr "0" "9" < test.txt
root:x:9:9:root:/root:/bin/bash
删除指定文件中所有的数字后输出内容到终端界面
[root@jindada ~]# tr -d "o" < test.txt
rt:x:0:0:rt:/rt:/bin/bash
取出系统eth0的IP地址
[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr '/' ' '
inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr '/' ' ' | cut -d " " -f6
10.0.0.100
五、常用文件处理命令-wc
1.含义
wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度,要想了解一个文件,不妨先wc一下吧~
语法格式:wc [参数] 文件
2.常用参数:
-w | 统计列数,默认以空白字符为分隔符 |
---|---|
-c | 统计字节数 |
-l | 统计行数 |
-m | 统计字符数 |
-L | 统计文件中最长的行的长度 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
3.常用示例
统计文件的字节数、单词数、行数
[root@jindada ~]# wc passwd
18 26 798 passwd
统计行数
[root@jindada ~]# wc -l passwd
18 passwd
统计指定文件的单词数量
[root@jindada ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@jindada ~]# wc -w /etc/hosts
10 /etc/hosts
统计指定文件的字节数量
[root@jindada ~]# ll passwd
-rw-r--r--. 1 root root 798 Jul 13 16:49 passwd
[root@jindada ~]# ll /etc/hosts
-rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@jindada ~]# wc -c /etc/hosts
158 /etc/hosts
[root@jindada ~]# wc -c passwd
798 passwd
统计文件中最长的行的长度
[root@jindada ~]# wc -L passwd
68 passwd
[root@jindada ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc -L /etc/hosts
78 /etc/hosts
[root@jindada ~]# name=ewuighrtuighwiorteugh
[root@jindada ~]# echo $name
ewuighrtuighwiorteugh
[root@jindada ~]# echo $name | wc -L
21
统计指定文件的字符数量
[root@jindada ~]# wc -m anaconda-ks.cfg
1256 anaconda-ks.cfg
统计指定文件的总行数
[root@jindada ~]# wc -l anaconda-ks.cfg
43 anaconda-ks.cfg