常用命令-文本处理
常用命令-文本处理
查看文本文件内容
cat
命令格式
cat [OPTION]... [FILE]...
常见选项参数说明
-E 显示行结束符$
-A 显示所有控制符
-n 对显示出的每一行进行编号
-b 非空行编号
-s 压缩连续的空行成一行
范例
[root@centos8 data]#cat -A file1.txt
a ^Ib$
c $
[root@centos8 data]#cat -nTE file1.txt
1 a ^Ib$
2 c $
扩展点
tac cat 命令反过来写,功能类似,按照行的倒序的方法输出文本信息
[root@centos8 data]#cat file1.txt
123
456
789
[root@centos8 data]#tac file1.txt
789
456
123
rev 跟tac 类似,tac 命令是按照行号倒序输出,rev 是将同一行内的内容前后内容倒序输出
[root@centos8 data]#cat file1.txt
123
456
789
[root@centos8 data]#rev file1.txt
321
654
987
nl 显示行号输出文本,等同于 cat -b
[root@centos8 data]#cat -b file1.txt
1 123
2 456
3 789
[root@centos8 data]#nl file1.txt
1 123
2 456
3 789
查看非文本文件内容
hexdump
二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看
范例
[root@centos8 ~]#hexdump -C -n 512 /dev/sda
00000000 eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.c..............|
扩展点
od 以八进制格式查看文本
[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x
0000000 64636261 68676665 6c6b6a69 706f6e6d
0000020 74737271 78777675 000a7a79
0000033
[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x1
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70
0000020 71 72 73 74 75 76 77 78 79 7a 0a
0000033
[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x1z
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 >abcdefghijklmnop<
0000020 71 72 73 74 75 76 77 78 79 7a 0a >qrstuvwxyz.<
0000033
xxd 以十六进制格式查看文本
[root@centos8 data]#echo {a..z}|tr -d ' '|xxd
00000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70 abcdefghijklmnop
00000010: 7172 7374 7576 7778 797a 0a qrstuvwxyz.
分页查看文本内容
more 和less
用于实现分页查看文件,可配合管道实现输出信息的分页。less 还可实现STDIN 输出,还是man 命令使用的分页器。
more 和less 的功能类似,不同的是,more 在显示到最后一行后会退出more 命令,将无法再次回退查看前面的内容。less 执行后,默认不会退出,直到用户执行退出命令才结束。
more [OPTIONS...] FILE...
参数 -d:显示翻页及退出提示
#查看时有用的命令包括
/文本 搜索 文本
n/N 跳到下一个或上一个匹配
范例
[root@centos8 data]#cat /etc/init.d/functions |less
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
# shell scripts in the /etc/init.d directory.
#
TEXTDOMAIN=initscripts
# Make sure umask is sane
umask 022
# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH
...省略...
显示文本前或后行内容
head 和tail
head 显示文件或标准输入的前面行,默认输出前10行的内容,支持管道
命令格式
head [OPTION]... [FILE]...
常用参数选项
-c # 指定获取前# 字节
-n # 指定获取前# 行
-# 同上
范例
[root@centos8 data]#head -n3 /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
[root@centos8 data]#head -3 /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
[root@centos8 data]#echo a我b |head -c4
a我[root@centos8 data]#
#获取随机10位字符
root@centos8 data]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
SEIE15Hkyk[root@centos8 data]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
KM9Ua535Lt[root@centos8 data]#
# 参数后跟负数表示除了后# 行外,其他的都取
[root@centos8 data]#cat /data/file.txt
1
2
3
4
5
6
7
8
9
10
[root@centos8 data]#head -n -3 /data/file.txt
1
2
3
4
5
6
7
tail 和head
相反,查看文件或标准输入的倒数行
命令格式
tail [OPTION]... [FILE]...
常用参数选项
-c # 指定获取后# 字节
-n # 指定获取后# 行
-# 同上
-f 跟踪显示文件fd 新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除在新建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于 --follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件
tailf 类似tail -f,当文件不增长时并不访问文件
范例
[root@centos8 data]#cat /data/file.txt
1
2
3
4
5
6
7
8
9
10
[root@centos8 data]#tail -n 3 /data/file.txt
8
9
10
#获取
[root@centos8 data]#tail -n +3 /data/file.txt
3
4
5
6
7
8
9
10
head 和tail 的总结示意图
按列抽取文本内容
cut
命令可提取文本文件或STDIN数据的指定列
命令格式
cut [OPTION]... [FILE]...
常用选项参数说明
-d DELIMITER 指明分隔符,默认tab
-f FILEDS:
#:第# 个字段,例如:3
#,#[,#]:离散的多个字段,例如:1,3,6
#-#:连续的多个字段,例如:1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING 指定输出分隔符
范例
#获取/etc/passwd 文件中的以:分隔的第1,3,4,7列
[root@centos8 data]#cut -d: -f1,3-4,7 /etc/passwd
root:0:0:/bin/bash
bin:1:1:/sbin/nologin
daemon:2:2:/sbin/nologin
……省略部分……
#以“---”作为分隔符来查看/etc/passwd 中的内容
[root@centos8 data]#cut -d: -f1,3,7 --output-delimiter="---" /etc/passwd
root---0---/bin/bash
bin---1---/sbin/nologin
daemon---2---/sbin/nologin
……省略部分……
#获取ifconfig 中的ip地址10.0.0.6
[root@centos8 data]#ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.6 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::97c7:830c:b164:a36d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7c:b8:2d txqueuelen 1000 (Ethernet)
RX packets 8665 bytes 830982 (811.5 KiB)
……省略部分……
[root@centos8 data]#ifconfig|head -n 2|tail -n +2|tr -s " "|cut -d " " -f3
10.0.0.6
#获取硬盘的利用率,Use%
[root@centos8 data]#df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 989668 0 989668 0% /dev
tmpfs 1006108 0 1006108 0% /dev/shm
tmpfs 1006108 8868 997240 1% /run
tmpfs 1006108 0 1006108 0% /sys/fs/cgroup
#方式一
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tail -n +2
0
0
1
0
3
1
13
0
#方式二
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tr -d '[:alpha:]'
合并多个文件的内容
paste
合并多个文件同行号的列到一列
命令格式
paste [OPTION]... [FILE]...
常用参数选项说明
-d #分隔符:指定分隔符,默认用TAB
-s #所有行合成一行显示
范例
[root@centos8 data]#cat file.txt
a
b
c
e
d
[root@centos8 data]#cat digit.txt
1
2
3
4
5
6
7
8
9
0
#将file.txt 和digit.txt 中同行的内容以“:”拼接成一列
[root@centos8 data]#paste -d: file.txt digit.txt
a:1
b:2
c:3
e:4
d:5
:6
:7
:8
:9
:0
#列转行
[root@centos8 data]#paste -sd: file.txt digit.txt
a:b:c:e:d
1:2:3:4:5:6:7:8:9:0
分析统计文本内容
wc
用于统计文件的总行数、单词总数、字节总数和字符总数。除文件外,还可对STDIN 中的数据统计
常用参数选项说明
-l 只统计行数
-w 只统计单词总数(单词是以字母、数字、下划线组成的)
-c 只统计字节总数
-m 只统计字符总数
-L 显示文件中最长行的长度
范例
#默认统计行数、单词数、字符总数
[root@centos8 data]#wc /etc/fstab
17 79 717 /etc/fstab
[root@centos8 data]#wc -l /etc/fstab
17 /etc/fstab
[root@centos8 data]#wc -w /etc/fstab
79 /etc/fstab
[root@centos8 data]#wc -L /etc/fstab
93 /etc/fstab
#中文占3个字符数
[root@centos8 data]#vim file.txt
今天礼拜四
[root@centos8 data]#wc file.txt
1 1 16 file.txt
sort 与uniq
sort
用于文本排序,在STDOUT 中,不改变原始文件
命令格式
sort [options] file(s)
常用参数选项说明
-r 执行反方向(由上至下)整理,倒序
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c c为字符,使用c 做为字段界定符
-k # 选项按照使用c字符分隔的# 列来整理能够使用多次
范例
#将磁盘利用率从大到小排序显示
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tail -n +2|sort -nr
13
3
1
1
0
0
0
0
#获取/etc/passwd 文件中最后3行记录的1,3,7列的值,并对第3列做降序排序
[root@centos8 data]#cut -d: -f1,3,7 /etc/passwd|tail -n 3|sort -t: -k2 -nr
dawn:1000:/bin/bash
postfix:89:/sbin/nologin
apache:48:/sbin/nologin
uniq
删除连续重复的行,只保留一行
命令格式
uniq [option]...[file]...
常用参数选项说明
-c 显示每行重复出现的次数
-d 仅显示重复过的行
-u 仅显示不曾重复的行
ps:uniq 常和sort 搭配管道一起使用,eg:
sort file.txt | uniq -c
[root@centos8 data]#cat f1.txt
abc
123
1a2b
a1b2
123abc
[root@centos8 data]#cat f2.txt
123abc
123
1a2b
aabb
123abc
#获取两个文件的相同行
[root@centos8 data]#cat f1.txt f2.txt | sort | uniq -d
123
123abc
1a2b
#获取两个文件的不同行
[root@centos8 data]#cat f1.txt f2.txt | sort | uniq -u
a1b2
aabb
abc
diff 与patch
diff
比较两个文件之间的区别
常用参数选项
-u 输出“统一的(unified)”diff格式文件,最适用于补丁文件
[root@centos8 data]#diff f1.txt f2.txt
1c1
< abc
---
> 123abc
4c4
< a1b2
---
> aabb
5a6
>
#带参数选项-u
[root@centos8 data]#diff -u f1.txt f2.txt
--- f1.txt 2020-08-06 17:02:47.473863243 +0800
+++ f2.txt 2020-08-06 17:04:33.205866263 +0800
@@ -1,5 +1,6 @@
-abc
+123abc
123
1a2b
-a1b2
+aabb
123abc
+
patch
复制在其他文件中进行的改变(需谨慎使用)
patch -b f1.txt f1_bak.txt
vimdiff
vimdiff
其实是vim编辑器的diff 模式,vim 中的快捷方式和命令在diff 模式下都支持
#窗口切换命令
Ctrl + w,l 光标切换到右侧窗口
Ctrl + w,h 光标切换到左侧的窗口
Ctrl + w,w 光标在两个窗口间彼此切换
#常用命令(末行模式)
qa 退出所有文件
wa 保存所有文件
wqa 保存并退出所有文件
qa! 强制退出(不保存)所有文件
zo 查看被折叠的内容
zc 重新折叠
范例
#跟在vim 编辑器下操作类似
[root@centos8 data]#vimdiff f1.txt f2.txt
ps:
玫红色(紫色) 文本内容不相同的行
红色(背景或文本) 文本内容不同或第二个参数文件没有的内容
蓝色 第一个参数文件有的内容