Linux 命令浏览文件内容
Linux 命令浏览文件内容
- 1. cat 查看文件的所有内容
- 1.1 -n 显示行号
- 1.2 -b 显示没有空行的行号
- 2. head 前10行标准输出
- 2.1 -c 输出每行第一个字符
- 2.2 -n 指定行数
- 3. tail 显示文件的最后 10 行数据
- 3.1 -c 显示指定字符
- 3.2 -n 指定行数
- 3.3 显示追加内容
- 4. more 分页显示文件内容(不可向前翻页)
- 5. less 分页显示文件内容
- 6. grep 过滤文件内容
- 6.1 -n 显示行号
- 6.2 -c 仅显示找到的行数
- 6.3 -l 忽略大小写
- 6.4 -v 反向选择,列出没有关键字的行
- 6.5 -A/B/C 匹配到的哪一行以及以下/以上/上下
- 7. wc 文件内容统计
- 7.1 -c 统计文件大小
- 7.2 -m 统计字符个数
- 7.3 -w 统计单词个数
- 7.4 -l 统计行数
- 8. cut 文件切割显示
- 8.1 -d 指定分隔符
- 8.2 -f 指定第几个字段
- 8.3 -c 指定获取第几个字符
- 9. sort 排序显示
- 9.1 -n 以数值型排序
- 9.2 -r 反向排序
- 9.3 -u 去除重复行
- 9.4 -k 指定字段范围
- 9.5 -t 指定间隔符
- 9.6 -b 忽略缩进与空格
- 9.7 -f 忽略大小写
- 10. uniq 去重显示
- 10.1 -c 统计重复行次数
- 11. 综合示例
- 案例一
- 案例二
1. cat 查看文件的所有内容
cat 命令是把一个文件中的内容全部输出,一般使用这个命令来显示小内容的文件。
1.1 -n 显示行号
1.2 -b 显示没有空行的行号
选项说明:
-b :显示没有空行的行号
-n :显示行号
-A :会在末尾显示 $ 符号
[root@localhost ~]# cat a.txt
hello
redhat
world
hadoop
python
java
linux
# 查看时输出行号
[root@localhost ~]# cat -n a.txt1 hello2 redhat3 world4 hadoop5 python6 java7 linux# 内容中加了空行
[root@localhost ~]# cat a.txt
helloredhat
worldhadoop
python
java
linux# 使用 -n 时空行也会标上行号
[root@localhost ~]# cat -n a.txt1 hello2 3 redhat4 world5 6 hadoop7 python8 java9 linux# 使用 -b 时空行不会标上行号
[root@localhost ~]# cat -b a.txt1 hello2 redhat3 world4 hadoop5 python6 java7 linux# -A 选项,会在末尾显示 $ 符号
[root@bogon ~]# cat -A /etc/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$
2. head 前10行标准输出
将每个FILE的前10行打印到标准输出。如果有多个文件,在每个文件之前加上一个头文件,给出文件名
2.1 -c 输出每行第一个字符
2.2 -n 指定行数
选项说明:
-c :输出每行的第一个字符
-n :输出指定的行数,默认为 10 行
#使用 head 命令来查看文件前 10 行数据
[root@bogon ~]# head /etc/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
# 使用 -c 选项来查看指定文件的前面指定的几个字符。注意:如果 -c 后面的数字是负数,那么会从
后向前截取。
[root@bogon ~]# head -c 5 /etc/passwd // 查看前面 5 个字符
root:
[root@bogon ~]# head -c 2 /etc/passwd // 查看前面 2 个字符
ro# 使用 -n 选项用于显示指定的行数,默认不指定时是 10 行。注意:如果 -n 选项后面的数字是负数,则会把文件最后指定行去掉后再显示
[root@bogon ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin# 显示前面10行并且带行号
[root@localhost ~]# head /etc/passwd | cat -n1 root:x:0:0:root:/root:/bin/bash2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8 halt:x:7:0:halt:/sbin:/sbin/halt9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10 operator:x:11:0:operator:/root:/sbin/nologin
3. tail 显示文件的最后 10 行数据
3.1 -c 显示指定字符
3.2 -n 指定行数
3.3 显示追加内容
选项说明:
-c :显示指定字符
-n :显示指定行数
-f :显示追加内容
#查看密码文件的最后 10 行内容
[root@localhost ~]# tail /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
cockpit-ws:x:983:982:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:982:981:User for cockpit-ws instances:/nonexisting:/sbin/nologin
gnome-initial-setup:x:981:980::/run/gnome-initial-setup/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:980:978:chrony system user:/var/lib/chrony:/sbin/nologin
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
# 显示文件最后 3 行数据,这就需要使用 -n 选项
[root@bogon ~]# tail -n 3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# 在 tail 命令中,指定负数的行数无效,它仍然显示最后指定的行数
[root@bogon ~]# tail -n -3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# -n 选项可以省略
[root@bogon ~]# tail -3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# -f 选项,用于获取文件中最新的数据,当使用这个选项后,文件会处于阻塞状态,
要退出按 ctrl + C
[root@bogon ~]# tail -f /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
ab:x:1001:1001::/home/ab:/bin/bash
admin:x:1002:10::/admin:/bin/bash
wang5:x:1003:1003:wang5,1330000:/home/wang5:/bin/bash
zhao6:x:1004:1004::/home/zhao6:/sbin/nologin
haha:x:1008:1008::/home/haha:/bin/bash^C
[root@bogon ~]#
注意:如果指定的行数是正数,则 -n 选项需要带上;如果指定的行数是负数,则 -n 选项可以省略,行数前面的负号就等价于 -n
4. more 分页显示文件内容(不可向前翻页)
[root@bogon ~]# cp /etc/passwd .
[root@bogon ~]# more 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
.
.
.
.
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
ab:x:1001:1001::/home/ab:/bin/bash
admin:x:1002:10::/admin:/bin/bash
wang5:x:1003:1003:wang5,1330000:/home/wang5:/bin/bash
zhao6:x:1004:1004::/home/zhao6:/sbin/nologin
haha:x:1008:1008::/home/haha:/bin/bash
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
--More--(52%)# 空格向下翻页,q 退出
more 显示到最后会自动退出。
注意:这个命令不能向前翻页。如果希望能够向前翻页,那么我们需要使用 less 命令
5. less 分页显示文件内容
分页显示文件内容,它的功能与 more 相同
可以按 enter 键来向下逐行滚动显示,也可以按空格键来向下翻一页,还可以按 b 键向上翻一页,如果要退出则按 q 键。
[root@localhost ~]# cat /etc/passwd >> passwd
[root@localhost ~]# cat /etc/passwd >> passwd
[root@localhost ~]# less passwd
推荐使用less而不是more来查看大文件的内容,因为 less 功能比more强
6. grep 过滤文件内容
使用格式:
- 说明:PATTERNS 表示是的要查找的关键字,严格来说应该是要查找的匹配字符
这个命令的功能是在指定的普通文件中查找并显示含有特定字符的行,也可以与管道符一起使用
6.1 -n 显示行号
6.2 -c 仅显示找到的行数
6.3 -l 忽略大小写
6.4 -v 反向选择,列出没有关键字的行
6.5 -A/B/C 匹配到的哪一行以及以下/以上/上下
效果图应该如下:
# 忽悠查找内容的大小写匹配
[root@localhost ~]# grep -i "root" passwd
Root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
选项说明:
-c :仅显示找到的行数
-i :忽略大小写
-n :显示行号
-v
:反向选择,它只会列出没有关键字的行
-A :-A 2 搜索时显示匹配到的那一行以及以下 2 行
-B :-B 2 搜索时显示匹配到的那一行以及以上 2 行
-C :-C 2 搜索时显示匹配到的那一行以及以上下 2 行
- 当PATTERNS是普通字符时
# 1. 需求:在 /etc/passwd 文件中查找含有 root 关键字的所有行
[root@bogon ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin# 2. 需求:在 /etc/passwd 文件中查找含有 /sbin/nologin 的所有行
[root@bogon ~]# grep /sbin/nologin /etc/passwd
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# 3. 需求:在 /etc/passwd 文件中查找不包含有 /sbin/nologin 的所有行
[root@bogon ~]# grep -v /sbin/nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# 4. 需求:在 /etc/passwd 文件中查找不包含有 /sbin/nologin 的所有行数
[root@bogon ~]# grep -vc /sbin/nologin /etc/passwd
5# 5. 需求:在 /etc/passwd 文件中查找包含 libstoragemgmt 行及后面的 3 行内容
[root@bogon ~]# grep -A 3 libstoragemgmt /etc/passwd
libstoragemgmt:x:987:987:daemon account for
libstoragemgmt:/:/usr/sbin/nologin
systemd-oom:x:986:986:systemd Userspace OOM Killer:/:/usr/sbin/nologin
pipewire:x:985:984:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
flatpak:x:984:983:User for flatpak system helper:/:/sbin/nologin# 6. 需求:在 /etc/passwd 文件中查找包含 libstoragemgmt 行及前面的 3 行内容
[root@bogon ~]# grep -B 3 libstoragemgmt /etc/passwd
sssd:x:995:991:User for sssd:/:/sbin/nologin
geoclue:x:994:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:993:989:SELinux troubleshoot
server:/var/lib/setroubleshoot:/sbin/nologin
libstoragemgmt:x:987:987:daemon account for
libstoragemgmt:/:/usr/sbin/nologin# 7. 需求:在 /etc/passwd 文件中查找包含 libstoragemgmt 行及前后的 3 行内容
[root@bogon ~]# grep -C 3 libstoragemgmt /etc/passwd
sssd:x:995:991:User for sssd:/:/sbin/nologin
geoclue:x:994:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:993:989:SELinux troubleshoot
server:/var/lib/setroubleshoot:/sbin/nologin
libstoragemgmt:x:987:987:daemon account for
libstoragemgmt:/:/usr/sbin/nologin
systemd-oom:x:986:986:systemd Userspace OOM Killer:/:/usr/sbin/nologin
pipewire:x:985:984:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
flatpak:x:984:983:User for flatpak system helper:/:/sbin/nologin# 8. 需求:在 /etc/passwd 文件中查找包含 Root 的所有行,不区分大小写
[root@bogon ~]# grep Root /etc/passwd
[root@bogon ~]# grep -i Root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin# 9. 需求:在 /etc/passwd 文件中查找包含 Root 的所有行及行号,不区分大小写
[root@bogon ~]# grep -in Root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
效果图应当如下:
注意:-A和-B选项不能同时使用。
- 当PATTERNS是特殊符号时
匹配模式 说明
grep h 文件名 查找文件里有字符 h 的行
grep ^[q] 文件名 匹配以 q 开头的行
grep ^[qf] 文件名 匹配以 q 或者 f 开头行
grep ^[^qf] 文件名 匹配以 q 或者 f 开头以外的行
grep ^[0-9] 文件名 匹配以数字开头的行
grep h$ 文件名称 匹配以 h 结尾的所有行
grep ^h$ 文件名称 匹配只有 h 的行
使用示例:
# 1. 需求:在 /etc/passwd 文件中查找包含 h 的行
[root@bogon ~]# grep h /etc/passwd
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
clevis:x:996:992:Clevis Decryption Framework unprivileged
user:/var/cache/clevis:/usr/sbin/nologin
setroubleshoot:x:993:989:SELinux troubleshoot
server:/var/lib/setroubleshoot:/sbin/nologin
flatpak:x:984:983:User for flatpak system helper:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:980:978:chrony system user:/var/lib/chrony:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# 2. 需求:在 /etc/passwd 文件中查找以 h 开头的行
[root@bogon ~]# grep ^h /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt# 3. 需求:在 /etc/passwd 文件中查找以 h 结尾的行
[root@bogon ~]# grep h$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# 4. 需求:在 /etc/passwd 文件中查找以 h 开头的以外所有行
[root@bogon ~]# grep ^[^h] /etc/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
.......# 5. 需求:在 /etc/passwd 文件中查找包含数字的所有行
[root@bogon ~]# grep [0-5] /etc/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# 6. 需求:在 /etc/ssh/sshd_config 文件中查找以数字结尾的所有行
[root@bogon ~]# grep [0-9]$ /etc/ssh/sshd_config
#Port 22
#ListenAddress 0.0.0.0
#MaxAuthTries 6
#MaxSessions 10
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
#X11DisplayOffset 10
#ClientAliveInterval 0
#ClientAliveCountMax 3
#MaxStartups 10:30:100
效果图如下:
拓展示例:
# 在 /root/passwd 文件中查找以 a 开头的所有行
[root@localhost ~]# grep ^a passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin# 在 /root/passwd 文件中查找以 h 结尾的所有行
[root@localhost ~]# grep h$ passwd
Root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash# 在 /etc/ssh/sshd_config 查找所有带有数字的行
[root@localhost ~]# grep -n [0-9] /etc/ssh/sshd_config
1:# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
4:# sshd_config(5) for more information.
21:#Port 22
23:#ListenAddress 0.0.0.0
28:#HostKey /etc/ssh/ssh_host_ed25519_key
39:#LoginGraceTime 2m
42:#MaxAuthTries 6
43:#MaxSessions 10
47:# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
83:#GSSAPIEnablek5users no
101:#X11Forwarding no
102:#X11DisplayOffset 10
103:#X11UseLocalhost yes
110:#ClientAliveInterval 0
111:#ClientAliveCountMax 3
114:#MaxStartups 10:30:100
127:# X11Forwarding no
7. wc 文件内容统计
如果希望统计一个 文件中的字符个数,我们需要使用 wc 命令
7.1 -c 统计文件大小
7.2 -m 统计字符个数
7.3 -w 统计单词个数
7.4 -l 统计行数
选项说明:
-c :统计文件大小
-m :统计字符个数
-w :统计单词个数
-l :统计行数
为了便于演示,我们给 file1 文件添加如下的内容:vim file1
执行这个命令后,按 i 键进行编辑模式,然后输入内容。输入完成后,按 esc 键,然后按 shift + : 来输入 冒号,然后输入 wq 保存,回车退出
hello word
redhat
centos
使用 wc 命令:
[root@bogon ~]# vim file1hello word
redhat
centos[root@bogon ~]# wc -lwc file1
3 4 25 file1# -c 用于统计文件的大小
[root@bogon ~]# wc -c file1
25 file1# -m 用于统计字符个数
[root@bogon ~]# wc -m file1
25 file1h e l l o 空格 w o r d 换行 r e d h a t 换行 c e n t o s 换行
共25个字节,一个字符一个字节
# -w 统计文件中单词个数
[root@bogon ~]# wc -w file1
4 file1# -l 统计文件中行数
[root@bogon ~]# wc -l file1
3 file1
8. cut 文件切割显示
命令cut:按列提取文本内容
8.1 -d 指定分隔符
8.2 -f 指定第几个字段
8.3 -c 指定获取第几个字符
选项说明:
-d :指定分隔符,如果是空格需要使用引号引起来
-f :指定第几个字段
-c :指定获取第几个字符
使用示例:
[root@bogon ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
从上面的显示内容可以发现,passwd 这个文件是通过冒号来进行分割的,一其有七列。
# 1. 需求:查看 /etc/passwd 文件中第1列内容
[root@bogon ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
# 这个命令解析说明:cut -d 分隔符 -f 要获取的列数 文件
-d :指定分隔符,如果是空格需要使用引号引起来
-f :指定第几个字段
# 2. 需求:查看 /etc/passwd 文件用户家目录所在的列
[root@bogon ~]# head -n 5 /etc/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
# 从上面的显示内容可以发现,用户的家目录( /root )在第6列
[root@bogon ~]# cut -d : -f 6 /etc/passwd
/root
/bin
/sbin
# 3. 需求:查看 /etc/passwd 文件第1列到第3列的内容
[root@bogon ~]# cut -d : -f 1-3 /etc/passwd
root:x:0
bin:x:1
daemon:x:2
adm:x:3
# 4. 需求:查看 /etc/passwd 文件中第1列和第6列的内容
[root@bogon ~]# cut -d : -f 1,6 /etc/passwd
root:/root
bin:/bin
daemon:/sbin
adm:/var/adm
-c :指定获取第几个字符
# 5. 需求:查看 /etc/passwd 文件中第2列的第4个字符
[root@bogon ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@bogon ~]# cut -c 4 /etc/passwd
t
:
m
:
x
# 6. 需求:查看 /etc/passwd 文件中系列的第1到第4个字符
[root@bogon ~]# cut -c 1-4 /etc/passwd
root
bin:
daem
# 查看 /etc/passwd 文件的第一列内容
[root@localhost ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
tss
systemd-coredump
.....# 查看 /etc/passwd 文件中家目录
[root@localhost ~]# cut -d : -f 6 /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin
/sbin
/sbin
/var/spool/mail
/root
/usr/games
.....# 查看 /etc/passwd 文件中第一列和第六列的内容
[root@localhost ~]# cut -d : -f 1,6 /etc/passwd
root:/root
bin:/bin
daemon:/sbin
adm:/var/adm
lp:/var/spool/lpd
sync:/sbin
shutdown:/sbin
halt:/sbin
mail:/var/spool/mail
operator:/root
.....# 查看 /etc/passwd 文件的第一列到第三列的内容
[root@localhost ~]# cut -d : -f 1-3 /etc/passwd
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5
shutdown:x:6
halt:x:7
mail:x:8
operator:x:11
......
9. sort 排序显示
在 Linux 中可以使用 sort 命令来对文本内容进行排序显示
9.1 -n 以数值型排序
9.2 -r 反向排序
9.3 -u 去除重复行
9.4 -k 指定字段范围
9.5 -t 指定间隔符
9.6 -b 忽略缩进与空格
9.7 -f 忽略大小写
选项说明:
-b:忽略缩进与空格
-f :忽略大小写
-n :以数值型排序
-r :反向排序
-k :指定字段范围
-t :指定间隔符
-u :去除重复行
使用示例:
# 查看 /etc/passwd 文件第 3 列并排序
# 接合 cut 来实现
[root@localhost ~]# cut -d : -f 3 /etc/passwd | sort # 得到的是自然顺序
[root@localhost ~]# cut -d : -f 3 /etc/passwd | sort -n # 得到的是数值顺序
[root@localhost ~]# cut -d : -f 3 /etc/passwd | sort -nr # 得到反序# 使用 sort 独自实现
[root@localhost ~]# sort -t : -k 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
[root@localhost ~]# sort -t : -k 3 -n /etc/passwd# 也可以对文件的内容进行排序
[root@localhost ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
10. uniq 去重显示
使用 uniq 命令可以用于去除文本中连续的重复行
10.1 -c 统计重复行次数
选项说明:
-c :可以统计重复行出现的次数
注意:这个命令是去掉文件中重复的内容。只有相邻相同的行才叫重复行,如果是隔开的两个相同行也 不算重复
编辑一个名叫 uniq.txt 的文件:vim uniq.txt
内容如下:
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Red Hat certified
Professional guidance
Linux Course
使用示例:
# 文件完整内容
[root@bogon ~]# cat uniq.txt
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Welcome to openlab.cn
Red Hat certified
Professional guidance
Linux Course# 去掉重复行后的内容
[root@bogon ~]# uniq uniq.txt
Welcome to openlab.cn
Red Hat certified
Professional guidance
Linux Course
# 使用 -c 选项后会把重复行的数据统计显示
[root@bogon ~]# uniq -c uniq.txt
5 Welcome to openlab.cn
1 Red Hat certified
1 Professional guidance
1 Linux Course
11. 综合示例
案例一
- 题目:公司有网站日志记录,需要统计出访问该网站访问次数
最多
的客户端的 ip 地址是多少。- 创建一个 .txt 文件存放日志记录
- 切割到 ip 地址那一列
- 对 ip 地址那一列的内容进行排序 sort 后去重并统计重复行 uniq
- uniq:只有相邻相同的行才叫重复行,如果是隔开的两个相同行也不算重复
- 对结果的第一列(统计重复行列)进行排序,并且是按数值反向排序
- 获取第一行数据
日志记录如下:
2022/12/01 12:00 10.0.0.1 Chrome2022/12/11 12:00 192.168.1.2 Chrome2022/12/12 12:00 10.0.0.2 Chrome2023/01/01 13:00 192.168.1.2 firefox2023/06/06 15:01 10.0.0.2 firefox2023/07/01 14:00 10.0.0.2 IE2023/08/01 13:00 192.168.1.2 firefox
- 创建一个 .txt 文件存放日志记录
vim log.txt2022/12/01 12:00 10.0.0.1 Chrome2022/12/11 12:00 192.168.1.2 Chrome2022/12/12 12:00 10.0.0.2 Chrome2023/01/01 13:00 192.168.1.2 firefox2023/06/06 15:01 10.0.0.2 firefox2023/07/01 14:00 10.0.0.2 IE2023/08/01 13:00 192.168.1.2 firefox
- 切割到 ip 地址那一列
- -d:指定分隔符
- -f:指定第几个字段
cut -d ' ' -f 3 weblog.txt10.0.0.1192.168.1.210.0.0.2192.168.1.210.0.0.210.0.0.2192.168.1.2
- 对 ip 地址那一列的内容进行排序 sort 后去重并统计重复行 uniq
- uniq:只有相邻相同的行才叫重复行,如果是隔开的两个相同行也不算重复
- -c:统计重复行数
cut -d ' ' -f 3 weblog.txt | sort10.0.0.110.0.0.210.0.0.210.0.0.2192.168.1.2192.168.1.2192.168.1.2
cut -d ' ' -f 3 weblog.txt | sort | uniq -c1 10.0.0.13 10.0.0.23 192.168.1.2
- 对结果的第一列(统计重复行列)进行排序,并且是按数值反向排序
- -t:指定间隔符
- -k:指定字段范围
- -n:以数值型排序
- -r:反向排序
cut -d ' ' -f 3 weblog.txt | sort | uniq -c | sort -t ' ' -k 1 -nr3 192.168.1.23 10.0.0.21 10.0.0.1
- 获取第一行数据
cut -d ' ' -f 3 weblog.txt | sort | uniq -c | sort -t ' ' -k 1 -nr | head -n 13 192.168.1.2
案例二
查出访问公司网站次数排名前三的客户端 ip 地址,并且还要知道访问的次数
真实案例:公司网站日志文件(/root/access.log)如下:2021/01/01 01:01 192.168.168.1 ie2021/01/02 01:02 192.168.168.2 chrome2021/01/03 01:03 192.168.168.1 ie2021/01/04 12:00 192.168.168.1 ie2021/01/05 01:05 192.168.168.3 firefox2021/01/06 01:06 192.168.168.4 chrome2021/01/06 01:06 192.168.168.6 chrome2021/01/06 01:06 192.168.168.6 chrome2021/01/07 12:07 192.168.168.5 ie2021/01/06 01:06 192.168.168.6 chrome
领导要求:查出访问我们公司网站次数排名前三的客户端ip地址,并且还要知道访问的次数。
cut -d ' ' -f 3 access.log | sort | uniq -c3 192.168.168.11 192.168.168.21 192.168.168.31 192.168.168.41 192.168.168.53 192.168.168.6
cut -d ' ' -f 3 access.log | sort | uniq -c | sort -t ' ' -k 11 192.168.168.21 192.168.168.31 192.168.168.41 192.168.168.53 192.168.168.13 192.168.168.6
cut -d ' ' -f 3 access.log | sort | uniq -c | sort -t ' ' -k 1 -r3 192.168.168.63 192.168.168.11 192.168.168.51 192.168.168.41 192.168.168.31 192.168.168.2
cut -d ' ' -f 3 access.log | sort | uniq -c | sort -t ' ' -k 1 -r | head -n 33 192.168.168.63 192.168.168.11 192.168.168.5