文本处理工具【1.5】

文本处理工具【1.5】

七、文本处理工具

  • 内容概述
    • 文本编辑工具VIM
    • 各种文本工具
    • 基本正则表达式和扩展正则表达式
    • 文本处理三剑客之grep

7.1 文本编辑工具之神VIM

7.1.1 vi和vim简介

  • 在Linux中我们经常编辑修改文本文件,即由ASCII, Unicode 或其它编码的纯文字的文件。之前介绍过nano,实际工作中我们会使用更为专业,功能强大的工具。
  • 文本编辑种类:
    • 全屏编辑器:nano(字符工具), gedit(图形化工具),vi,vim
    • 行编辑器:sed
  • VI
    • Visual editor,文本编辑器,是 Linux 必备工具之一,功能强大,学习曲线较陡峭,学习难度大
  • VIM
    • VIsual editor iMproved ,和 vi 使用方法一致,但功能更为强大,不是必备软件
    • VIM 官网 :https://www.vim.org
  • 其他相关编辑器:gvim 一个Vim编辑器的图形版本
  • VIM 小抄

7.1.2 使用 vim 初步

7.1.2.1 vim 命令格式
vim [OPTION]... FILE...
常用选项含义
+N打开文件后让光标处于第N行的行首,+默认行尾
+/PATTERN让光标处于第一个被PATTERN匹配到的行行首
-b file二进制方式打开文件
-d file1 file2…比较多个文件,相当于 vimdiff
-m file只读打开文件
-e file直接进入ex模式,相当于执行ex file
-y fileEasy mode (like “evim”, modeless),直接可以操作文件,ctrl+o:wq
  • 说明:

    • 如果该文件存在,文件被打开并显示内容
    • 如果该文件不存在,当编辑后第一次存盘时创建它
    • 如果后面打开的是一个目录,则会列出目录中所有内容,可以用方向键进行选择
  • 范例:

[root@ubuntu2204 ~]# vim f1.txt #光标在第一行
[root@ubuntu2204 ~]# vim +3 f1.txt #光标在第3[root@ubuntu2204 ~]# vim + f1.txt #光标在最后一行

[root@ubuntu2204 ~]# vim +/^abc f2.txt #模式匹配定位
[root@ubuntu2204 ~]# vim +/^bc* f2.txt #模式匹配定位
7.1.2.2 三种主要模式和转换
  • vim 是一个模式编辑器,击键行为是依赖于 vim 的 的“模式”

  • 三种模式:

    • 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
    • 插入(Insert)或编辑模式:用于修改文本
    • 扩展命令(extended command )或命令(末)行模式:保存,退出等
      在这里插入图片描述
  • 三种模式之间的切换:

  • vim 是 一个模式编辑器,击键行为是依赖于 vim的 的“模式”,就是说,在不同模式下,相同的按键,是不同的意思;

  • 插入模式和扩展命令模式之间不能直接切换,要走命令模式中转;

  • 打开vim 默认就是命令模式;

#命令模式 --------------------------> 插入模式
#下列按键皆可

#i insert, 在光标所在处输入
#I 在当前光标所在行的行首输入
#a append, 在光标所在处后面输入
#A 在当前光标所在行的行尾输入
#o 在当前光标所在行的下方打开一个新行
#O 在当前光标所在行的上方打开一个新行

#命令模式 --------------------------> 扩展命令模式
#直接敲冒号 :


#################################################################


#插入模式 -------------------------> 命令模式
#按ESC键


#插入模式 -------------------------> 扩展命令模式
#按ESC到命令模式,再按冒号 : 到扩展命令模式


#################################################################


#扩展命令模式 ----------------------> 命令模式
#ESC键或Enter键或退格健


#扩展命令模式 ---------------------> 插入模式
#ESC|Enter|退格键 到命令模式,再i|I|a|A|o|O 到插入模式
  • 范例: 插入颜色字符
[root@ubuntu2204 ~]# echo -e '\e[1;31mhello\e[0m'
  • vim 中实现
    • 1️⃣ 切换至插入模式
    • 2️⃣ 按ctrl+v+[ 三个键,显示 ^[
    • 3️⃣ 后续输入颜色信息,如:^[[32mhello^[[0m
    • 4️⃣ 切换至扩展命令模式,保存退出
    • 5️⃣ cat 文件可以看到下面显示

在这里插入图片描述

7.1.3 扩展命令模式

  • 按:进入Ex模式 ,创建一个命令提示符: 处于底部的屏幕左侧
7.1.3.1 扩展命令模式基本命令
常用选项含义
w写(存)磁盘文件
wq写入并退出
x写入并退出
X加密
q退出
q!不存盘退出,即使更改都将丢失
r filename读文件内容到当前文件中
w filename将当前文件内容写入另一个文件
!command执行命令
r!command读入命令的输出
  • 范例:
:w 				#保存当前更改,不退出
:q! 			#不保存退出
:r /etc/fstab 	#将/etc/fstable
:w test 		#将当前打开的文件保存至另外一个文件
:!hostname 		#执行hostname
:r!uname -a 	#将 uname -a 的命令执行结果读到当前文件中


:X 				#加密码
Enter encryption key: ******
Enter same key again: ******

:X 				#解密码
Enter encryption key: 直接回车键
Enter same key again: 直接回车键
7.1.3.2 地址定界
  • 格式:
:start_pos,end_pos CMD
7.1.3.2.1 地址定界格式
常用选项含义
N具体第N行,例如2表示第2行
M,N从左侧M表示起始行,到右侧N表示结尾行
M,+N从左侧M表示起始行,右侧表示从光标所在行开始,再往后+N行结束
M,-N从左侧M表示起始行,右侧表示从光标所在行开始,-N所在的行行结束
M;+N从第M行处开始,往后数N行,2;+3 表示第2行到第5行,总共取4行
M;-N从第M-N行开始,到第M行结束
.当前行
$最后一行
.,$-1当前行到倒数第二行
%全文, 相当于1,$
/pattern/从当前行向下查找,直到匹配pattern的第一行,即正则匹配
/pat1/,/pat2/从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
N,/pat/从指定行开始,一直找到第一个匹配pattern的行结束
/pat/,$向下找到第一个匹配patttern的行到整个文件的结尾的所有行
7.1.3.2.2 地址定界后跟一个编辑命令
常用选项含义
p输出
d删除
y复制
w file将范围内的行另存至指定文件中
r file在指定位置插入指定文件中的所有内容
t行号将前面指定的行复制到N行后
m行号将前面指定的行移动到N行后
  • 范例:
[root@rocky8 ~]# seq 10 > 10.txt

:2d 			#删除第2:2,4d 			#删除第2到第4:2;+3y 			#复制第2到第5行,总共4:2;+4w test 	#将第2到第6行,总共5行内容写入新文件
:5r /etc/issue 	#将/etc/issue 文件读取到第5行的下一行
:t2 			#将光标所在行复制到第2行的下一行
:2;+3t10 		#将第2到第5行,总共4行内容复制到第10行之后
:.d 			#删除光标所在行
:$y 			#复制最后一行
:.,$d 			#删除光标所在行到最后一行
7.1.3.3 查找并替换
  • 格式
:s/要查找的内容/替换为的内容/修饰符
:%s 表示全文查找替换
  • 说明:
要查找的内容:可使用基本正则表达式模式
替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;
还可以使用“&”引用前面查找时查找到的整个内容
  • 修饰符:
常用选项含义
i忽略大小写
g全局替换,默认情况下,每一行只替换第一次出现
gc全局替换,每次替换前询问
  • 查找替换中的分隔符/可替换为其它字符,如:#,@
  • 范例:
案例含义
: s/root/ROOT/替换当前行第一个root
: s/root/ROOT/g替换当前行所有root
:%s/root/ROOT/g全文替换
:%s/root/test/ig不区分大小写全文替换
:%s/#//将每行第一个#替换成空
:s/root/ROOT/ 		#替换当前行第一个root
:s/root/ROOT/g 		#替换当前行所有root
:%s/root/ROOT/g 	#全文替换
:%s/root/test/ig 	#不区分大小写全文替换

:%s/#// 			#将每行第一个#替换成空
7.1.3.4 定制vim的工作特性
  • 扩展命令模式的配置只是对当前vim进程有效,可将配置存放在文件中持久保存;
  • 写配置文件必须保证能识别,有些短格式在配置文件中无法识别
  • 配置文件;
/etc/vimrc #全局配置
~/.vimrc #个人配置
7.1.3.4.1 行号
:set number|set nu 		#显示行号
:set nonumber|set nonu 	#取消显示行号
7.1.3.4.2 忽略字符的大小写
:set ignorecase|set ic 			#忽略字符大小写
:set noignorecase|set noic 		#不忽略
7.1.3.4.3 自动缩进
:set autoindent|set ai 		#启用自动缩进
:set noautoindent|set noai 	#禁用自动缩进
7.1.3.4.4 复制保留格式
:set paste 		#复制时保留格式
:set nopaste 	#禁用复制时保留格式选项
7.1.3.4.5 显示Tab ^I和换行符 和$显示
:set list 	#显示系统字符
:set nolist #隐藏系统字符
7.1.3.4.6 高亮搜索
:set hlsearch 			#高亮显示搜索结果
:set nohlsearch|nohl 	#不高亮显示搜索结果
7.1.3.4.7 语法高亮
:syntax on 		#语法高亮
:syntax off 	#关闭语法高亮
7.1.3.4.8 文件格式
:set fileformat=dos|set ff=dos 		#启用windows格式
:set fileformat=unix|set ff=unix 	#启用unix格式:
7.1.3.4.9 Tab 用空格代替
:set expandtab|set et 		#使用空格代替Tab,默认8个空格
:set noexpandtab|set noet 	#禁用空格代替Tab
7.1.3.4.10 Tab用指定空格的个数代替
:set tabstop=N|set ts=N 	#指定N个空格代替Tab
7.1.3.4.11 设置缩进宽度
>> 					#向右缩进 命令模式
<< 					#向左缩进 命令模式

:set shiftwidth=4 	#设置缩进为4个字符
7.1.3.4.12 设置光标所在行的标识线
:set cursorline|set cul 		#给光标所在行加下划线
:set nocursorline|set nocul 	#取消光标下划线
7.1.3.4.13 加密
:set key=password 	#加密文档
:set key= 			#取消加密
7.1.3.4.14 了解更多
  • set 帮助
:help option-list
:set|:set all

7.1.4 命令模式

  • 命令模式,又称为Normal模式,功能强大,但是在此模式下输入的命令不会在屏幕上显示,只能靠记忆
  • 记住到底输入了什么,所以此处我们要记住大量快捷键;
7.1.4.1 退出VIM
常用命令含义
ZZ保存退出
ZQ不保存退出
7.1.4.2 光标跳转
  • 字符间跳转
常用命令含义
h
L右,小写字母
j
k
Nh|Nl|Nj|Nk每次跳转N个长度 2h表示向左移两个字符,3j表示向下走3行
  • 单词间跳转
常用命令含义
w下一个单词的词首
e当前或下一单词的词尾
b当前或前一个单词的词首
Nw|Ne|Nb一次跳N个单词
  • 当前页跳转
常用命令含义
H页首
M页中间行
L页底
zt将光标所在当前行移到屏幕顶端
zz将光标所在当前行移到屏幕中间
zb将光标所在当前行移到屏幕底端
  • 行首行尾跳转
常用命令含义
^跳转至行首的第一个非空白字符
0跳转至行首
$跳转至行尾
  • 行间移动
常用命令含义
NG|:N跳转至指定行,N表示正整数,比如 10G,或在扩展命令模式下:10,都表示跳转到第10行
G最后一行
gg|1G第一行
  • 句间移动
常用命令含义
)下一句
(上一句
  • 段落间移动
常用命令含义
}下一段
{上一段
  • 命令模式翻屏操作
常用命令含义
Ctrl+f向文件尾部翻一屏,相当于Pagedown
Ctrl+b向文件首部翻一屏,相当于Pageup
Ctrl+d向文件尾部翻半屏
Ctrl+u向文件首部翻半屏
7.1.4.3 字符编辑
常用命令含义
x剪切光标处的字符
Nx剪切光标处起始的N个字符,N为正整数
xp交换光标所在处的字符及其后面字符的位置,本质是先剪切,再粘贴
~转换大小写
J删除当前行后的换行符,就是把下一行接到当前行后面
7.1.4.4 替换命令(replace)
常用命令含义
r只替换光标所在处的一个字符,先敲r,再输入想要替换的新字符
R切换成REPLACE模式(在末行出现-- REPLACE – 提示),按ESC回到命令模式
7.1.4.5 删除命令(delete)
常用命令含义
d删除命令,可结合光标跳转字符,实现范围删除
d$ | D删除光标处到行尾
d^删除光标处到非空行首
d0删除光标处到处行首
dw从光标处删到下一个单词的词首
de从光标处删到当前单词词尾或下一单词的词尾
db从光标处删到当前单词词首或前一单词的词首
dG删除光标所在的行到文件末尾
dgg删除光标所在的行到文件开始
dd删除光标所在行
Ndd从当前行开始,删N行,N表示正整数,2dd表示从当前行开始,总共删2行
这些内容都在缓冲区,可以用p键粘贴出来
7.1.4.6 复制命令(yank)
常用命令含义
y复制,行为相似于d命令
y$复制光标处到行尾
y0复制光标处到行首
y^复制光标处到非空行首
yy|Y复制整行,yy前面加数字,表示从当前处往后复制多少行; 3yy 表示往下复制3行
Nyy从当前处往后复制N行, N表示正整数,2yy表示从当前行开始,总共复制2行
yw从光标处复制到下一个单词的词首
ye从光标处复制到当前单词词尾或下一单词的词尾
yb从光标处复制到当前单词词首或下一单词的词首
7.1.4.7 粘贴命令(paste)
常用命令含义
p小写 p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P大写 p 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
7.1.4.8 改变命令(change)
  • 命令 c 删除后切换成插入模式
常用命令含义
c$ | C删除光标处到行尾,并切换成插入模式
c^删除光标处到非空行首,并切换成插入模式
c0删除光标处到行首,并切换成插入模式
cc删除当前行并输入新内容,相当于S,加数字表示向下删除多少行,然后切换成插入模式
NccN表示正整数
cw从光标处删到下一个单词的词首,并切换成插入模式
ce从光标处删到当前单词词尾或下一单词的词尾,并切换成插入模式
cb从光标处删到当前单词词首或下一单词的词首,并切换成插入模式
  • 命令模式操作文本总结
常用命令Change(replace)Delete(cut)Yank(copy)
Lineccddyy
Lettercldlyl
Wordcwdwyw
Sentence aheadc)d)y)
Sentence behindc(d(y(
Paragraph abovec{d{y{
Paragraph belowc}d}y}
7.1.4.9 查找
常用命令含义
/PATTERN从当前光标所在处向文件尾部查找
?PATTERN从当前光标所在处向文件首部查找
n与命令同方向
N与命令反方向
7.1.4.10 撤消更改
常用命令含义
u撤销最近的更改,相当于windows中ctrl+z
Nu撤销之前多次更改,N表示正整数
U撤消光标落在这行后所有此行的更改
Ctrl+r重做最后的“撤消”更改,相当于windows中crtl+y
.重复前一个操作
N.重复前一个操作N次,N为正整数
7.1.4.11 高级用法
<start position><command><end position>
  • 常见Command:y 复制、d 删除、gU 变大写、gu 变小写
  • 范例:
范例含义
#START COMMAND END
0y$复制整行,0表示到行首,y表示复制,$表示行尾,连起来就是复制整行
di"光标在" “之间,则删除” "之间的内容
yi(光标在()之间,则复制()之间的内容
vi[光标在[]之间,则选中[]之间的内容
dtx删除字符直到遇见光标之后的第一个 x 字符
ytx复制字符直到遇见光标之后的第一个 x 字符
10iabc ESC在光标处插入10个abc

7.1.5 可视化模式

  • 在末行有”-- VISUAL – “指示,表示在可视化模式

  • 允许选择的文本块

    • v 面向字符,-- VISUAL –
    • V 面向整行,-- VISUAL LINE –
    • ctrl-v 面向块,-- VISUAL BLOCK –
  • 可视化键可用于与移动键结合使用

  • w ) } 箭头等

  • 突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

  • 范例:在文件指定行的行首插入#

    • 1️⃣、先将光标移动到指定的第一行的行首
    • 2️⃣、输入ctrl+v 进入可视化模式
    • 3️⃣、向下移动光标,选中希望操作的每一行的第一个字符
    • 4️⃣、输入大写字母 I 切换至插入模式
    • 5️⃣、输入 #
    • 6️⃣、按 ESC 键
  • 范例:在指定的块位置插入相同的内容

    • 1️⃣、光标定位到要操作的地方
    • 2️⃣、CTRL+v 进入“可视块”模式,选取这一列操作多少行
    • 3️⃣、SHIFT+i(I)
    • 4️⃣、输入要插入的内容
    • 5️⃣、按 ESC 键

7.1.6 多窗口模式

7.1.6.1 多文件分割
vim FILE1 FILE2...

#多文件之间切换
:next
:prev
vim -o|-O FILE1 FILE2 ...
-o 				#水平或上下分割
-O 				#垂直或左右分割(vim only)
:wqall 			#退出
Ctrl+w, Arrow 	#在窗口间切换
[root@rocky8 ~]# vim -o f1.txt f2.txt
[root@rocky8 ~]# vim -O f1.txt f2.txt
7.1.6.2 单文件窗口分割
常用命令含义
Ctrl+w,ssplit, 水平分割,上下分屏
Ctrl+w,vvertical, 垂直分割,左右分屏
ctrl+w,q取消相邻窗口
ctrl+w,o取消全部窗口
:wqall退出
Ctrl+w, Arrow在窗口间切换,Arrow 表示方向键

7.1.7 帮助

:help
:help topic 	#topic 是指主题,比如 :help yy 就表示查看yy命令的用法
:q 				#退出help
:help index 	#列出所有主题
  • vim 帮助程序
[root@ubuntu2204 ~]# vimtutor

7.1.8 vim 总结图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2 文本常见处理工具

7.2.1 文件内容查看命令

7.2.1.1 查看文本文件内容
7.2.1.1.1 cat
  • cat 可以查看文本内容
  • 格式:
cat [OPTION]... [FILE]...
常用选项含义
-E|–show-ends显示行结束符$
-A|–show-all显示所有控制符
-n|–number对显示出的每一行进行编号
-b|–number-nonblank非空行编号
-s|–squeeze-blank压缩连续的空行成一行
  • 范例:
[root@ubuntu2204 ~]# cat -A /data/fa.txt
a b$
c $
d^Ib^Ic$

[root@ubuntu2204 ~]# cat /data/fa.txt
a b
c
d b c

[root@ubuntu2204 ~]# cat /data/fb.txt
a
b
c

[root@ubuntu2204 ~]# hexdump -C /data/fb.txt
00000000 61 0d 0a 62 0d 0a 63 0d 0a 	|a..b..c..|
00000009

[root@ubuntu2204 ~]# cat -A /data/fb.txt
a^M$
b^M$
c^M$

[root@ubuntu2204 ~]# file /data/fb.txt
/data/fb.txt: ASCII text, with CRLF line terminators
7.2.1.1.2 nl : 显示行号,相当于cat -b
[root@ubuntu2204 ~]# cat /data/f1.txt
a
b
c
d
e
f
g
h

[root@ubuntu2204 ~]# nl /data/f1.txt
	1 a
	2 b
	3 c
	4 d
	5 e
	6 f
	7 g
	8 h
7.2.1.1.3 tac : 逆向显示文本内容,行倒序显示
[root@ubuntu2204 ~]# cat /data/fa.txt
1
2
3
4
5

[root@ubuntu2204 ~]# tac /data/fa.txt
5
4
3
2
1

[root@ubuntu2204 ~]# tac
a
bb
ccc 按ctrl+d
ccc
bb
a

[root@ubuntu2204 ~]# seq 10 | tac
10
9
8
7
6
5
4
3
2
1
7.2.1.1.4 rev : 将同一行的内容逆向显示,同一行倒序
[root@ubuntu2204 ~]# cat /data/fa.txt
1 2 3 4 5
a b c

#上下顺序逆向
[root@ubuntu2204 ~]# tac /data/fa.txt
a b c
1 2 3 4 5

#逐行逆向
[root@ubuntu2204 ~]# rev /data/fa.txt
5 4 3 2 1
c b a

#标准输入
[root@ubuntu2204 ~]#rev
abcdef
fedcba

[root@ubuntu2204 ~]# echo {1..10} |rev
01 9 8 7 6 5 4 3 2 1
  • 上下左右颠倒
[root@ubuntu2204 ~]$ vim xyz
[root@ubuntu2204 ~]$ cat xyz
1234
5678
abcd
ABCD
[root@ubuntu2204 ~]$ tac xyz
ABCD
abcd
5678
1234
[root@ubuntu2204 ~]$ cat xyz | tac
ABCD
abcd
5678
1234
[root@ubuntu2204 ~]$ cat xyz | tac | rev
DCBA
dcba
8765
4321
[root@ubuntu2204 ~]$ cat xyz | rev
4321
8765
dcba
DCBA
[root@ubuntu2204 ~]$ cat xyz | rev | tac
DCBA
dcba
8765
4321
7.2.1.2 查看非文本文件内容
  • 范例:hexdump
hexdump -C -n 512 /dev/sda

echo {a..z} | tr -d ' '|hexdump -C
[root@Rockey9-1 ~]# hexdump -C -n 512 /dev/sda
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 80 7d  |. ..d|<.t...R..}|
00000090  e8 17 01 be 05 7c b4 41  bb aa 55 cd 13 5a 52 72  |.....|.A..U..ZRr|
000000a0  3d 81 fb 55 aa 75 37 83  e1 01 74 32 31 c0 89 44  |=..U.u7...t21..D|
000000b0  04 40 88 44 ff 89 44 02  c7 04 10 00 66 8b 1e 5c  |.@.D..D.....f..\|
000000c0  7c 66 89 5c 08 66 8b 1e  60 7c 66 89 5c 0c c7 44  ||f.\.f..`|f.\..D|
000000d0  06 00 70 b4 42 cd 13 72  05 bb 00 70 eb 76 b4 08  |..p.B..r...p.v..|
000000e0  cd 13 73 0d 5a 84 d2 0f  83 d8 00 be 8b 7d e9 82  |..s.Z........}..|
000000f0  00 66 0f b6 c6 88 64 ff  40 66 89 44 04 0f b6 d1  |.f....d.@f.D....|
00000100  c1 e2 02 88 e8 88 f4 40  89 44 08 0f b6 c2 c0 e8  |.......@.D......|
00000110  02 66 89 04 66 a1 60 7c  66 09 c0 75 4e 66 a1 5c  |.f..f.`|f..uNf.\|
00000120  7c 66 31 d2 66 f7 34 88  d1 31 d2 66 f7 74 04 3b  ||f1.f.4..1.f.t.;|
00000130  44 08 7d 37 fe c1 88 c5  30 c0 c1 e8 02 08 c1 88  |D.}7....0.......|
00000140  d0 5a 88 c6 bb 00 70 8e  c3 31 db b8 01 02 cd 13  |.Z....p..1......|
00000150  72 1e 8c c3 60 1e b9 00  01 8e db 31 f6 bf 00 80  |r...`......1....|
00000160  8e c6 fc f3 a5 1f 61 ff  26 5a 7c be 86 7d eb 03  |......a.&Z|..}..|
00000170  be 95 7d e8 34 00 be 9a  7d e8 2e 00 cd 18 eb fe  |..}.4...}.......|
00000180  47 52 55 42 20 00 47 65  6f 6d 00 48 61 72 64 20  |GRUB .Geom.Hard |
00000190  44 69 73 6b 00 52 65 61  64 00 20 45 72 72 6f 72  |Disk.Read. Error|
000001a0  0d 0a 00 bb 01 00 b4 0e  cd 10 ac 3c 00 75 f4 c3  |...........<.u..|
000001b0  00 00 00 00 00 00 00 00  2a f9 77 8a 00 00 80 04  |........*.w.....|
000001c0  01 04 83 fe c2 ff 00 08  00 00 00 00 20 00 00 fe  |............ ...|
000001d0  c2 ff 8e fe c2 ff 00 08  20 00 00 f8 df 18 00 00  |........ .......|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[root@Rockey9-1 ~]# 
[root@Rockey9-1 ~]# echo {a..z} | tr -d ' ' | hexdump -C
00000000  61 62 63 64 65 66 67 68  69 6a 6b 6c 6d 6e 6f 70  |abcdefghijklmnop|
00000010  71 72 73 74 75 76 77 78  79 7a 0a                 |qrstuvwxyz.|
0000001b
[root@ubuntu2204 ~]$ cat xyz
1234
5678
abcd
ABCD
[root@ubuntu2204 ~]$ hexdump xyz
0000000 3231 3433 350a 3736 0a38 6261 6463 410a
0000010 4342 0a44                              
0000014
[root@ubuntu2204 ~]$ hexdump -C xyz
00000000  31 32 33 34 0a 35 36 37  38 0a 61 62 63 64 0a 41  |1234.5678.abcd.A|
00000010  42 43 44 0a                                       |BCD.|
00000014

7.2.2 分页查看文件内容

7.2.2.1 more
  • 可以实现分页查看文件,可以配合管道实现输出信息的分页
  • 格式
more [OPTIONS...] FILE...
常用选项含义
-d在底部显示提示
-s压缩连续空行
命令选项含义
空格键翻页
回车键下一行
!cmd执行命令
h显示帮助
:f显示文件名和当前行号
=显示行号
  • 示例:
[root@ubuntu2204 ~]# more /var/log/syslog

[root@ubuntu2204 ~]# cat /var/log/syslog | more
7.2.2.2 less
  • less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
  • 格式:
less [OPTIONS...] FILE...
常用选项含义
-e显示完成后自动退出
-N显示行号
-s压缩连续空行
-S不换行显示较长的内容
命令选项含义
:h显示帮助
/string搜索
:!cmd执行命令
b向上翻
  • 范例:
[root@ubuntu2204 ~]# less -N /var/log/syslog

[root@ubuntu2204 ~]# tree / -d | less

7.2.3 显示文本前面或后面的行内容

7.2.3.1 head
  • 可以显示文件或标准输入的前面行
  • 格式:
head [OPTION]... [FILE]...
常用选项含义
-c|–bytes=N指定获取前N字节
-n|–lines=N指定获取前N行,N如果为负数,表示从文件头取到倒数第N前
-N同上
-q|–quiet|–silent不输出文件名
-v|–verbose输出文件名
-z|–zero-terminated以NULL字符而非换行符作为行尾分隔符
  • 范例:
[root@ubuntu2204 ~]$ echo "123456" | head -c 5
12345[root@ubuntu2204 ~]$ echo "123456" | head -c 3
123[root@ubuntu2204 ~]$ echo "123456" | head -n 1
123456
[root@ubuntu2204 ~]$ echo "123456" | head
123456
[root@ubuntu2204 ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

[root@ubuntu2204 ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

[root@ubuntu2204 ~]# echo a我b | head -c4
a我[root@ubuntu2204 ~]#

[root@ubuntu2204 ~]# cat /dev/urandom | tr -dc '[:alnum:]'| head -c10

G755MlZatW[root@ubuntu2204 ~]# cat /dev/urandom | tr -dc '[:alnum:]'| head -c10

ASsax6DeBz[root@ubuntu2204 ~]#

#用随机字符串修改密码
[root@centos8 ~]# cat /dev/urandom | tr -dc '[:alnum:]'| head -c10 | tee pass.txt| passwd --stdin mage
Changing password for user mage.
passwd: all authentication tokens updated successfully.

[root@centos8 ~]# cat pass.txt

AGT952Essg[root@centos8 ~]# su - wang
[wang@centos8 ~]$ su - mage
Password:

[root@ubuntu2204 ~]# cat seq.log
1
2
3
4
5
6
7
8
9
10

[root@ubuntu2204 ~]# head -n 3 seq.log
1
2
3

[root@ubuntu2204 ~]# head -n -3 seq.log
1
2
3
4
5
6
7

[root@ubuntu2204 ~]# head -n +3 seq.log
1
2
3
7.2.3.2 tail
  • tail 和 head 相反,查看文件或标准输入的倒数行
  • 格式:
tail [OPTION]... [FILE]...
常用选项含义
-c|–bytes=N指定获取后N字节
-n|–lines=N指定获取后N行,如果写成+N,表示从第N行开始到文件结束
-N同上
-f|–follow=descriptor跟踪显示文件fd新追加的内容,常用日志监控,当删除再新建同名文件,将无法继续跟踪
-F|–follow=name --retry跟踪文件名,相当于–follow=name --retry,当删除文件再新建同名文件,可继续追踪
-q|–quiet|–silent不输出文件名
-z|–zero-terminated以NULL字符而非换行符作为行尾分隔符
tailf类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8已经无此工具
  • 范例:
[root@ubuntu2204 ~]# cat /data/f1.txt
1
2
3
4
5
6
7
8
9
10

[root@ubuntu2204 ~]# tail -n 3 /data/f1.txt
8
9
10

[root@ubuntu2204 ~]# tail -n +3 /data/f1.txt
3
4
5
6
7
8
9
10
[root@ubuntu2204 ~]$ echo "abcdefghijl" | tail -c 2
l
[root@ubuntu2204 ~]$ echo "abcdefghijl" | head -c 2
ab[root@ubuntu2204 ~]$
  • 范例:
[root@ubuntu2204 ~]# tail -3 /var/log/syslog
May 10 08:25:52 ubuntu2204 systemd[1]: Starting Cleanup of Temporary
Directories...
May 10 08:25:52 ubuntu2204 systemd[1]: systemd-tmpfiles-clean.service:
Deactivated successfully.
May 10 08:25:52 ubuntu2204 systemd[1]: Finished Cleanup of Temporary
Directories.


[root@ubuntu2204 ~]# tail -f /var/log/syslog
......
......

#只查看最新发生的日志
[root@ubuntu2204 ~]# tail -fn0 /var/log/syslog

[root@ubuntu2204 ~]# tail -0f /var/log/syslog

#取IP[root@ubuntu2204 ~]# ifconfig | head -2 | tail -1
	
	inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
7.2.3.3 head 和 tail 总结
命令含义示例
head -n k file取 file 前 k行内容head -n 3 /etc/passwd
head -k file取 file 前 k行内容head -3 /etc/passwd
head -n +k file取 file 前 k行内容head -n +3 /etc/passwd
head -n -k file取file 第1行到倒数第k行内容head -n -3 /etc/passwd
tail -n k file从后往前数,取file 第1行到第k行内容tail -n 3 /etc/passwd
tail -k file从后往前数,取file 第1行到第k行内容tail -3 /etc/passwd
tail -n -k file从后往前数,取file 第1行到第k行内容tail -n -3 /etc/passwd
tail -n +k file从后往前数,取file 第1行到倒数第k行内容tail -n +3 /etc/passwd

在这里插入图片描述

  • 范例: 显示第6行
[root@ubuntu2204 ~]# seq 20 | head -n 6 | tail -n 1
6
[root@ubuntu2204 ~]# seq 20 | tail -n +6 | head -n 1
6

7.2.4 按列抽取文本 cut

  • cut 命令可以提取文本文件或STDIN数据的指定列
  • 格式
cut OPTION... [FILE]...
常用选项含义
-b|–bytes=LIST以字节分割,指定要显示的列
-c|–characters=LIST以字符分割,指定要显示的列
-d|–delimiter=DELIM指定分割符,默认是tab
-f|–fields=LIST要显示的列,-f1, -f1,2,3, -f 1-3,4
-s|–only-delimited不显示没有包括分割符的内容
–output-delimiter=STRING输出的时候用指定字符代替分割符
-z|–zero-terminated以 NUL 字符而非换行符作为行尾分隔符
#一个中文是三个字节,一个字符
  • 范例:
[root@ubuntu2204 ~]# cut -d: -f1,3-4,7 /etc/passwd

[root@ubuntu2204 ~]$ cut -d":" -f7 /etc/passwd

[root@ubuntu2204 ~]# ifconfig |head -n2 |tail -n1|cut -d" " -f10
10.0.0.8

[root@ubuntu2204 ~]# ifconfig |head -n2 |tail -n1|tr -s " " |cut -d " " -f3
10.0.0.8

[root@ubuntu2204 ~]# df | tr -s " " | cut -d" " -f5 | tr -dc "[0-9\n]"

1
7
0
0
14
1

[root@ubuntu2204 ~]# df | tr -s ' ' % |cut -d% -f5 |tr -d '[:alpha:]'

1
7
0
0
14
1

[root@ubuntu2204 ~]# df | cut -c64-65
se
1
7
0
0
14
1

[root@ubuntu2204 ~]# cut -d: -f1,3,7 --output-delimiter="---" /etc/passwd
root---0---/bin/bash
daemon---1---/usr/sbin/nologin
bin---2---/usr/sbin/nologin


[root@ubuntu2204 ~]# cat /etc/passwd | cut -d: -f7
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin

[root@ubuntu2204 ~]# echo {1..100}| cut -d ' ' -f1-100 --output-delimiter="+" |bc
5050
[root@ubuntu ~]# echo {1..100} | tr -s " " "+"
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@ubuntu ~]# echo {1..100} | tr -s " " "+" | bc
5050

[root@ubuntu ~]# echo {1..100} | cut -d" " -f1-100 --output-delimiter="+"
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@ubuntu ~]# echo {1..100} | cut -d" " -f1-100 --output-delimiter="+" | bc
5050

[root@ubuntu ~]# seq -s + 100
1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
[root@ubuntu ~]# seq -s + 100 | bc
5050
[root@ubuntu2204 ~]$ vim abc
[root@ubuntu2204 ~]$ cat abc
123	456	7		890
[root@ubuntu2204 ~]$ cut -f1 abc
123
[root@ubuntu2204 ~]$ cut -f1,2 abc
123	456
[root@ubuntu2204 ~]$ cut -f1-3 abc
123	456	7
[root@ubuntu2204 ~]$ cut -f1-4 abc
123	456	7	
[root@ubuntu2204 ~]$ cat -A abc
123^I456^I7^I^I890$
  • 范例: 取分区利用率
#取分区利用率
[root@ubuntu2204 ~]# df|tr -s ' ' |cut -d' ' -f5 |tr -d %
Use
1
7
0
0
14
1

[root@ubuntu2204 ~]# df|tr -s ' ' '%'|cut -d% -f5
Use
1
7
0
0
14
1

#取分区利用率
[root@ubuntu2204 ~]# df|tr -s ' ' |cut -d' ' -f5 |tr -d %
Use
1
7
0
0
14
1

[root@ubuntu2204 ~]# df|tr -s ' ' '%'|cut -d% -f5
Use
1
7
0
0
14
1

[root@ubuntu2204 ~]# df |cut -c 64-65|tail -n +2
1
7
0
0
14
1

[root@ubuntu2204 ~]# df | tail -n +2|tr -s ' ' % |cut -d% -f5
1
7
0
0
14
1

[root@ubuntu2204 ~]# df | tail -n +2|tr -s ' ' |cut -d' ' -f5 |tr -d %
1
7
0
0
14
1

7.2.5 合并多个文件 paste

  • paste 合并多个文件同行号的行到一行
  • 格式
paste [OPTION]... [FILE]...
常用选项含义
-d|–delimiters=LIST指定分割符,默认用TAB
-s|–serial合成一行显示
-z|–zero-terminated以 NUL 字符而非换行符作为行尾分隔符
  • 范例:
[root@ubuntu2204 ~]# cat alpha.log
a
b
c
d
e
f
g
h

[root@ubuntu2204 ~]# cat seq.log
1
2
3
4
5

[root@ubuntu2204 ~]# cat alpha.log seq.log
a
b
c
d
e
f
g
h
1
2
3
4
5

[root@ubuntu2204 ~]# paste alpha.log seq.log
a 1
b 2
c 3
d 4
e 5
f
g
h

[root@ubuntu2204 ~]# paste -d":" alpha.log seq.log
a:1
b:2
c:3
d:4
e:5
f:
g:
h:

[root@ubuntu2204 ~]# paste -s seq.log
1 2 3 4 5

[root@ubuntu2204 ~]# paste -s alpha.log
a b c d e f g h

[root@ubuntu2204 ~]# paste -s alpha.log seq.log
a b c d e f g h
1 2 3 4 5

[root@ubuntu2204 ~]# cat title.txt
ceo
coo
cto

[root@ubuntu2204 ~]# cat emp.txt
mage
zhang
wang
xu

[root@ubuntu2204 ~]# paste title.txt emp.txt
ceo mage
coo zhang
cto wang
xu

[root@ubuntu2204 ~]# paste -s title.txt emp.txt
ceo coo cto
mage zhang wang xu

[root@ubuntu2204 ~]# paste -s -d: f1.log f2.log
1:2:3:4:5:6:7:8:9:10
a:b:c:d:e:f:g:h:i:j

[root@ubuntu2204 ~]# seq 10|paste -s -d+|bc
55
  • 范例: 批量修改密码
[root@ubuntu2204 ~]# cat user.txt
tom
jerry

[root@ubuntu2204 ~]# cat pass.txt
123456
654321

[root@ubuntu2204 ~]## paste -d: user.txt pass.txt
tom:123456
jerry:654321

[root@ubuntu2204 ~]# paste -d: user.txt pass.txt | chpasswd

7.2.6 分析文本的工具

  • 文本数据统计:wc
  • 整理文本:sort
  • 比较文件:diff和patch
7.2.6.1 收集文本统计数据 wc
  • wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数,可以对文件或STDIN中的数据统计
  • 格式:
wc [OPTION]... [FILE]...
常用选项含义
-l|–lines只统计数行数
-w|–words只统计数单词总数
-c|–bytes只统计数字节总数
-m|–chars只统计数字符总数
-L|–max-line-length显示文件中最长行的长度
  • 范例:
wc story.txt
39 		237 	1901 	story.txt
行数 	单词数 	字节数
[root@ubuntu2204 ~]# wc title.txt
3 6 30 title.txt

#仅显示行
[root@ubuntu2204 ~]# wc -l title.txt
3 title.txt

#管道重定向
[root@ubuntu2204 ~]# cat title.txt | wc -l
3

#不显示第一行
[root@ubuntu2204 ~]$ df | tail -n $(echo `df | wc -l`-1|bc)
tmpfs                                197448    1304    196144   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 101590008 8282576  88100804   9% /
tmpfs                                987236       0    987236   0% /dev/shm
tmpfs                                  5120       0      5120   0% /run/lock
/dev/sda2                           1992552  256804   1614508  14% /boot
tmpfs                                197444       4    197440   1% /run/user/0
7.2.6.2 文本排序 sort
  • 把整理过的文本显示在STDOUT,不改变原始文件
  • 格式:
sort [OPTION]... [FILE]...
常用选项含义
-b|–ignore-leading-blanks忽略文件中的空白
-f|–ignore-case忽略大小写
-h|–human-numeric-sort人类可读排序
-M|–month-sort以月份排序
-n|–numeric-sort以数字大小排序
-R|–random-sort随机排序
-r|-reverse倒序
-t|–field-separator=SEP指定列分割符
-k|–key=KEYDEF指定排序列
-u|–unique去重
-z|–zero-terminated以 NUL 字符而非换行符作为行尾分隔符
  • 范例:
[root@ubuntu2204 ~]# cut -d: -f1,3 /etc/passwd|sort -t: -k2 -nr |head -n3
nobody:65534
jerry:1003
tom:1002


#统计日志访问量
[root@ubuntu2204 ~]# cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l
201
  • 范例:统计分区利用率
[root@ubuntu2204 ~]# df
Filesystem 						  1K-blocks    Used Available Use% Mounted on
tmpfs 								 198824    1308    197516 1%   /run
/dev/mapper/ubuntu--vg-ubuntu--lv 101590008 6218392  90164988 7%   /
tmpfs 								 994116       0    994116 0%   /dev/shm
tmpfs 								   5120       0      5120 0%   /run/lock
/dev/sda2 							1992552  255260   1616052 14%  /boot
tmpfs 								 198820       4    198816 1%   /run/user/0

#查看分区利用率最高值
[root@ubuntu2204 ~]# df| tr -s ' ' '%'|cut -d% -f5|sort -nr|head -1
14

[root@ubuntu2204 ~]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort
0
0
1
1
14
7

[root@ubuntu2204 ~]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr
14
7
1
1
0
0

[root@ubuntu2204 ~]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -n |tail -n1
14

[root@ubuntu2204 ~]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr
14
7
1
1
0
0

[root@ubuntu2204 ~]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr | head -n1
14
  • 面试题:有两个文件,a.txt与b.txt ,合并两个文件,并输出时确保每个数字也唯一
[root@ubuntu2204 ~]# cat a.txt
1111
222
33
4444
5
666
77
8
9999
100000

[root@ubuntu2204 ~]# cat b.txt
8
1111
33
222
100000
77
159
666
137
189

[root@ubuntu2204 ~]# cat a.txt b.txt | sort -n | uniq
5
8
33
77
137
159
189
222
666
1111
4444
9999
100000
7.2.6.3 去重 uniq
  • uniq 命令从输入中删除前后相接的重复的行,常和 sort 配合使用
  • 格式:
uniq [OPTION]... [INPUT [OUTPUT]]
常用选项含义
-c|–count显示每行出现次数
-d|–repeated仅显示有重复行
-D显示所有重复行具体内容
-u|–unique仅显示不重复的行
-z|–zero-terminated以 NUL 字符而非换行符作为行尾分隔符
  • 范例:
[root@ubuntu2204 ~]# sort -n a.txt b.txt | uniq -c
	1 5
	2 8
	2 33
	2 77
	1 137
	1 159
	1 189
	2 222
	2 666
	2 1111
	1 4444
	1 9999
	2 100000
  • 范例:统计日志访问量最多的前三名的请求
[root@ubuntu2204 ~]# lastb | head -n $(echo `lastb | wc -l`-2 | bc) | tr -s ' ' | cut -d " " -f3 | sort | uniq -c | sort -nr | head -3
5 183.136.225.32
2 47.101.154.149
1 64.62.197.96
  • 范例:取两个文件的相同和不同的行
#取相同行
[root@ubuntu2204 ~]# cat a.txt b.txt | sort | uniq -d
100000
1111
222
33
666
77
8


#取文件的不同行
[root@ubuntu2204 ~]# cat a.txt b.txt | sort | uniq -u
137
159
189
4444
5
9999
7.2.6.4 比较文件
7.2.6.4.1 diff
  • diff 命令比较两个文件之间的区别
  • 格式:
diff [OPTION]... FILES
常用选项含义
-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
  • 范例:
[root@ubuntu2204 ~]# cat f1.txt
111
xxx
magedu

[root@ubuntu2204 ~]# cat f2.txt
3
xxx
magedu
222
5

[root@ubuntu ~]# diff f1.txt f2.txt
1c1
< 111
---
> 3
3a4,5
> 222
> 5

[root@ubuntu2204 ~]# diff -u f1.txt f2.txt
--- f1.txt 2023-05-10 09:19:07.387258181 +0800
+++ f2.txt 2023-05-10 09:23:15.176468494 +0800
@@ -1,3 +1,5 @@ 		#比较结果,- f1 3行, + f2 5-111
+3
xxx
magedu
+222
+5


#将对比结果保存至文件
[root@ubuntu2204 ~]# diff -u f1.txt f2.txt > f.patch

[root@ubuntu2204 ~]# rm -f f2.txt


#用来还原
[root@ubuntu2204 ~]# patch -b f1.txt f.patch
patching file f1.txt


#原还出来的是 f2
[root@ubuntu2204 ~]# cat f1.txt
3
xxx
magedu
222
5

[root@ubuntu2204 ~]# cat f1.txt.orig
111
xxx
magedu
7.2.6.4.2 patch【谨慎使用】
  • patch 复制在其它文件中进行的改变(要谨慎使用)
  • 格式:
patch [OPTION]... [ORIGFILE [PATCHFILE]]
常用选项含义
-b|–backup备份
  • 范例:
[root@ubuntu2204 ~]# patch -b f1.txt f.patch
patching file f1.txt

#用f1.txt和 f.patch 生成一个名为f1.txt的文件,但内容是原来f2.txt文件中的内容,
#-b 选项则备份了现有的 f1.txt
7.2.6.4.3 vimdiff
  • 相当于 vim -d
[root@ubuntu2204 ~]# which vimdiff
/usr/bin/vimdiff

[root@centos8 ~]#ll /usr/bin/vimdiff
lrwxrwxrwx. 1 root root 3 Nov 12 2019 /usr/bin/vimdiff -> vim

[root@centos8 ~]# vimdiff f1.txt f2.txt
[root@ubuntu2204 ~]# ll /usr/bin/vimdiff
lrwxrwxrwx 1 root root 25 Apr 21 2022 /usr/bin/vimdiff ->
/etc/alternatives/vimdiff*

[root@ubuntu2204 ~]# ll /etc/alternatives/vimdiff
lrwxrwxrwx 1 root root 18 Apr 21 2022 /etc/alternatives/vimdiff ->
/usr/bin/vim.basic*
7.2.6.4.4 cmp
  • 范例:查看二进制文件的不同
[root@ubuntu2204 ~]# ll /usr/bin/dir /usr/bin/ls
-rwxr-xr-x 1 root root 138208 Feb 8 2022 /usr/bin/dir*
-rwxr-xr-x 1 root root 138208 Feb 8 2022 /usr/bin/ls*

[root@ubuntu2204 ~]# ll /usr/bin/dir /usr/bin/ls -i
918119 -rwxr-xr-x 1 root root 138208 Feb 8 2022 /usr/bin/dir*
918278 -rwxr-xr-x 1 root root 138208 Feb 8 2022 /usr/bin/ls*

[root@ubuntu2204 ~]# diff /usr/bin/dir /usr/bin/ls
Binary files /usr/bin/dir and /usr/bin/ls differ

[root@ubuntu2204 ~]# cmp /bin/dir /bin/ls
/bin/dir /bin/ls differ: byte 25, line 1

#跳过前20个字节,观察后面10个字节
[root@ubuntu2204 ~]# hexdump -s 20 -Cn 10 /bin/ls
00000014 01 00 00 00 b0 6a 00 00 00 00 |.....j....|
0000001e

[root@ubuntu2204 ~]# hexdump -s 20 -Cn 10 /bin/dir
00000014 01 00 00 00 90 6a 00 00 00 00 |.....j....|
0000001e

endl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良辰美景好时光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值