1、vi编辑
vi编辑文本有三种常用模式:命令模式,编辑模式,末行模式
命令模式移动光标方式
# 纵向移动
G #快速移动到文本行尾
gg #快速移动到文本行首
2gg #快速移动第二行
2G #快速移动第二行
# 横向移动
$ #快速移动到一行的行尾
0 或 ^ #快速移动到一行的行首
命令模式复制内容方式
dd # 默认剪切一行内容
2dd # 从当前光标往下剪切2行内容
yy # 默认复制一行内容 copy
2yy # 从当前光标往下复制2行内容
p # 从当前光标下黏贴一遍内容
2p # 从当前光标下黏贴2遍内容
u # 撤销文本的操作
ctrl+r # 撤回文本的操作
dG # 表示从光标位置到文本末尾内容删除
r # 表示替换单个字符
命令模式进入编辑模式
i # 表示当前光标位置前插入,进入编辑模式
a # 表示当前光标位置后插入,进入编辑模式
o # 表示当前光标位置另起下一行插入,进入编辑模式
O # 表示当前光标位置另起上一行插入,进入编辑模式
I # 表示当前光标位置所在行的行首,进入编辑模式
A # 表示当前光标位置所在行的行尾,进入编辑模式
C(大写) # 表示从光标所在位置到行尾内容剪切,进入编辑模式
cc # 表示剪切光标所在行,进入编辑模式
末行模式命令操作
: # 从命令模式进入末行模式
:q # 未编辑时,退出
:q! # 强制退出vim
:wq # w 保存内容
:set nu # 显示行号
:set nonu # 取消显示行号
/xxx # /表示从当前光标下搜索内容 按n 向下继续搜索
?xxx # ?表示从当前光标下搜索内容 按n 向下继续搜索
/xxxc # 搜索内容后加c 表示搜索忽略大小写
:set ic # 表示在此次编辑,搜索忽略大小写
:set noic # 表示在此次编辑,取消忽略大小写
2、vim的特殊用法
vim特点:对编辑文本内容不同的高亮显示
如何取消搜索后高亮?
使用/搜索内容时,会对搜索到内容进行高亮,永久保存
# 取消搜索后高亮
/ 搜索文本内容没有的内容
vim快速移动或复制数据
:2,4move9 —— # 将第2行到第4行的内容移动到第9行的下一行
:2,4copy9 —— # 将第2行到第4行的内容复制到第9行的下一行
对文本内容进行批量替换
:%s#oldboy#oldgirl#g # 表示文本内容oldboy替换为oldgirl
符号说明:
% # 表示文本的全部内容
s # 表示替换 substitute
g # 表示把每一行匹配到内容替换
替换内容说明:
:2,4s#oldboy#odgirl#g # 表示只替换第2行到第4行的oldboy
:%s#oldboy#oldgirl# # 表示替换全部行首个oldboy
如何批量修改内容
# a、批量编辑注释内容
第一个步骤:进入批量编辑状态(视图模式)
ctrl+v --- 进入试图模式
-- VISUAL BLOCK --
第二个步骤:批量选中要编辑的行
方向键上下选择要编辑的行
第三个步骤:进行编辑修改
shift+i--进行单行编辑
第四个步骤:实现批量修改
按esc
# b、批量删除注释内容
第一个步骤:进入批量编辑状态(视图模式)
ctrl+v --- 进入试图模式
-- VISUAL BLOCK --
第二个步骤:批量选中要编辑的行
方向键上下选择要删除的行
第三个步骤:批量删除内容
按键盘字母d 或者 按键盘字母x
3、vim编辑原理
vim编辑错误解决(重点)
# 1). vim命令后面一定要接文件
# 2). vim只能编辑存在的目录中的文件,可以创建文件
# 3). 编辑文件突然非正常状态退出
编辑一个文件,在没有退出前,直接断开远程连接
再次打开文件编辑会有警告提示 —— 产生了一个临时文件
Swap file ".text.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
O (大写)进入vim模式,只能读文件内容,不能修改文件 —— "text" [readonly] 19L, 132C
E (大写)强行进入编辑模式
R (大写)恢复关闭之前对文件的操作内容
D (大写)删除临时文件
Q/A (大写)退出
vim编辑文本内容原理
# 1).使用vim编辑一个文件 —— vim text
# 2).判断文件所在目录下是否有文件相关的临时文件
拥有:会有报错信息提示
没有:正常进入命令模式
# 3).打开文件,产生临时文件
# 4).正常编辑文件
# 5).编辑完成,是否正常保存文件退出
正常:编辑模式——ESC——末行模式—— :wq 保存退出
异常:临时文件将会永久保留
如何处理vim异常的流程
# 1).查看文件信息 —— 按大写O查看
# 2).确认文件内容是否需要恢复
需要:按大写R恢复数据
不要:按大写E进入编辑
# 3).删除临时文件
a、按大写D删除临时文件
b、rm -rf .text.swp
4、如何直接对文件内容编辑
1).文件中添加一行信息
echo 'oldboy' >> text # 文件内容末行追加内容
echo命令说明
# a.向屏幕上输出内容
echo 'hello word'
# b.输出连续的内容1,2,3......10
echo {1..10} # {} 表示输出的内容 .. 表示输出从哪到哪
1 2 3 4 5 6 7 8 9 10
echo {01..10} # 可以显示同位数
01 02 03 04 05 06 07 08 09 10
# c.输出显示不连续的内容
输出奇数
echo {01..10..2} # 01 03 05 07 09
输出偶数
echo {02..10..2} # 02 04 06 08 10
# 2).文件中添加多行信息 —— cat命令
cat >>text << EOF # EOF表示开始结束标志(任意)
> oldboy
> EOF
{} 的使用技巧
# 1.输出连续的字符
echo {1..10}
# 2.在目录下创建多个文件
touch oldboy{01..5}
# 3.在同一个目录下创建多个目录
mkdir -p oldboy01/oldgirl{01..5}
mkdir oldboy/oldgirl{1..5}/olddog
5、过滤筛选文件内容命令
四剑客命令初步认识
老大:awk —— 对数据内容统计分析
老二: sed —— 对数据内容进行替换
老三:grep —— 对数据内容进行过滤
老四:find —— 查找文件
grep 命令过滤信息操作
# 测试文件信息
[root @matter ~ ]# cat text
oldboy01
oldgirl01
olddog01
oldboy02
oldgirl02
olddog02
1).过滤文件中的oldboy
[root @matter ~ ]# grep oldboy text
oldboy01
oldboy02
2).过滤文件中的oldgirl的一行和他上一行的内容
[root @matter ~ ]# grep oldgirl text -B 1 —— B before 在....之前
oldboy01
oldgirl01
--
oldboy02
oldgirl02
3).过滤文件中的oldgirl的一行和他下一行的内容
[root @matter ~ ]# grep oldgirl text -A 1 —— A after 在...之后
oldgirl01
olddog01
--
oldgirl02
olddog02
4).过滤文件中的oldgirl信息的下一行和下一行信息也显示
[root @matter ~ ]# grep oldgirl text -C 1 -C center 居中
oldboy01
oldgirl01
olddog01
oldboy02
oldgirl02
olddog02
5).统计过滤内容出现的次数
[root @matter ~ ]# grep oldgirl text -c -c count 计数
# sed 命令过滤信息操作
[root @matter ~ ]# sed -n '/oldgirl/p' text
oldgirl01
oldgirl02
# sed过滤格式: sed -n '/过滤内容/p' 文件
p 将过滤的内容信息输出
-n 取消对文件内容的输出,只显示过滤匹配的内容
# awk 命令过滤信息操作
[root @matter ~ ]# awk '/oldgirl/' text
oldgirl01
oldgirl02
6、文件内容直接替换
sed 命令替换文件信息
# 需求文件中oldboy替换为olddog
vim命令替换:%s#oldboy#olddog#g
sed命令替换:'s#oldboy#olddog#g'
# sed默认显示替换内容,对文件内容并不替换
[root @matter ~ ]# sed 's#oldboy#oldgirl#g' text
oldgirl01
oldgirl01
olddog01
oldgirl02
oldgirl02
olddog02
# 参数 -i sed真正的替换文件内容
[root @matter ~ ]# sed 's#oldboy#oldgirl#g' text -i
[root @matter ~ ]# cat text
oldgirl01
oldgirl01
olddog01
oldgirl02
oldgirl02
olddog02
# sed命令默认是假装替换内容信息并显示
# sed -i 真正文件内容替换
tr 命令 —— 只能假装替换,除非使用重定向
# tr 命令格式:tr 要替换的内容 替换的内容 < 文件
echo 'python123'|tr 'python' 'linux' # linuxx123
echo 'python123'|tr "a-z" "A-Z" # PYTHON123
tr替换原理
[root @matter ~ ]# cat text
oldboy01
oldgirl02
[root @matter ~ ]# tr 'oldboy' 'oldgirl' < text
ldgir01
ildgirl02
# 为什么替换内容乱了?
o —— o
l —— l
d —— d
b —— g
o —— i
y —— r
# 替换信息的情况: tr命令替换信息是1对1的替换
01. 替换的内容字符数 > 修改后的内容字符数 abcd > 123
echo abcd|tr "abcd" "123" # 1233
02. 替换的内容字符数 < 修改后的内容字符数 abc < 1234
echo abcd|tr "abc" "1234" # 123d
03. 替换的内容字符数 = 修改后的内容字符数 abcd = 1234
echo abcd|tr "abcd" "1234" # 1234
04. 极特殊情况
abcba 12345 54345
c - 3
b - 4
a - 5