一·故事背景
在之前基础的学习下,终于接触到了很重要的技术,vim操作,在之后的生涯中,vim或将一直伴随我们的生涯,虽然第一次接触他,但是总有一种熟悉的感觉,冥冥中好像在呼唤,曾经的我也这样和你相遇么,很高兴重新认识你,vim。
二·VIM编辑器
一·VIM操作系统
①·相关命令
操作 | 作用 |
---|---|
G | 跳转到文件末尾 |
gg | 返回文件首行 |
home键或者^ | 跳到首字符 |
end键或者$ | 跳到尾字符 |
yy | 单行复制 |
nyy | n行复制 |
P | 将光标移动到想要粘贴位置的上一行 |
p | 将光标移动到想要粘贴位置的下一行 |
u | 撤销操作,注意:进行保存且退出后无效 |
dd | 单行删除 |
ndd | n行删除 |
D或者d$ | 从所在行的光标处删除到末尾 |
d^ | 从所在行的光标处删除到行首 |
r | 替换某一个字符 |
del键 | 光标所在字符的后一个字符 |
/关键字 | 根据关键字查找,n:上翻;N:下翻 |
ZZ | 保存且退出 |
大写G回到底部
gg回到行首
home或者^回到首字符
end或者$跳转尾字符
yy单行复制,p复制到下一行
nyy多行复制,P复制到上一行
u取消操作
dd单行删除
ndd多行删除
D或者d$,光标处删除至句尾
d^光标处删除至句首
r替换单字符
del删除光标后一个字符
/关键词 查找关键词
zz保存退出
②·操作模式
作用:进行文件内容编辑
操作 | 作用 |
---|---|
a | 进入插入模式,在当前光标的后一个字符插入 |
o | 在当前光标的下一行插入 |
i | 在当前光标所在字符插入,返回命令模式时会将光标迁移一个字符 |
A | 在光标所在行的尾字符后插入 |
I(大写i) | 在光标所在行的首字符插入 |
O | 在当前光标的上一行插入 |
ESC(按键) | 返回命令模式 |
a进入插入模式,光标后插入
o进入插入模式,光标下一行进行操作
i进入插入模式,结束会回退一格
A进入插入模式,在光标尾字符插入
I进入插入模式,在光标首字符插入
O进入插入模式,从光标上一行开始插入
③·末行模式
作用:保存、退出及字符串替换
操作 | 作用 |
---|---|
:w | 保存 |
:q | 不保存退出 |
:wq或:x | 保存退出 |
! | 强制 |
:X->输入密码->:wq | 设置密码并保存退出 |
:X->回车两次->:wq 或者 :set key=""->:wq | 取消密码 |
:set nu | 设置行号 |
:set nonu | 取消行号 |
:nohl | 取消高亮 |
:行号 | 跳转到指定行 |
:%s/keyword/neword/ | 全文替换,首个匹配替换,当包含路径时,#替换/作为匹配符号 |
:%s/keyword/neword/g | 全文替换,所有匹配替换,当包含路径时,#替换/作为匹配符号 |
:指定行号s/keyword/neword/ | 指定行替换,首个匹配替换,当包含路径时,#替换/作为匹配符号 |
:指定行号s/keyword/neword/g | 指定行替换,所有匹配替换,当包含路径时,#替换/作为匹配符号 |
:起始行号,结束行号s/keyword/neword/ | 范围替换,首个匹配替换,当包含路径时,#替换/作为匹配符号 |
:起始行号,结束行号s/keyword/neword/g | 范围替换,所有匹配替换,当包含路径时,#替换/作为匹配符号 |
小练习
1·执行:set nu
显示行号,再用:set nonu
取消显示
2·使用:15
直接跳转到第15行
3·对10-20行执行范围替换: :10,20s/error/warning/g
4·执行全文替换:
1:%s/error/ERROR/
替换每行第一个"error"
2:%s/error/ERROR/g
替换所有"error"
5·练习:X
设置文件密码,再通过:set key=""
取消密码
6·用:w test_backup.txt
另存为副本文件
④·视图模式
操作 | 作用 |
---|---|
v | 进行行选中 |
练习
1·用v
进入行选择模式:
选中3行后按y
复制
移动光标后用p
粘贴
⑤·视图快模式
操作 | 作用 |
---|---|
ctrl + v | 进行列选中 |
选中要删除的“#”,按del | 批量删除注释 |
选中要添加的列,输入 大写i ,输入#,按两次ESC | 批量增加注释 |
1·用Ctrl+v
进入列块模式:
纵向选中多列字符后按d
删除
选中列后按I#
添加注释,按两次ESC生效
2·批量注释:
用列块模式选中多行行首
插入#
注释符
再次用列块模式删除注释符
二·vim高级用法
操作 | 作用 |
---|---|
:r!command | 将命令结果插入文件,command命令的结果插入光标下一行 |
:nr! command | 将命令结果插入文件,command命令的结果插入n行后 |
:m,n! command | 使用页面内容作为输入,command以m,n之间的行作为标准输入, 标准输出会代替m,n之间的行. 注意这个操作似乎是不可用ctrl+r撤销的。要谨慎使用。 |
:! /bin/bash | 暂时离开vim来执行命令,使用完sh后exit又可以返回vim |
练习
1·在末行模式执行:r !date
插入当前日期到光标下方
2·用:5r !ls -l
将命令结果插入到第5行下方
3·尝试:!ls
执行外部命令后返回编辑界面
三·Linux系统文件与目录内容检索
一、文件和目录内容检索处理命令
1·grep筛选
在文本中查找指定的字符串所在的行。
语法:
grep [选项] file
选项:
选项 | 作用 |
---|---|
-i | 忽略大小写。 |
-v | 反转匹配,只显示不匹配的行。 |
-c | 计数,只输出匹配行的数量。 |
-n | 显示匹配行及其行号。 |
-l(小写L) | 只输出包含匹配字符串的文件名。 |
-L | 只输出不包含匹配字符串的文件名。 |
-q(暂时不用) | 静默模式,不输出任何匹配信息。 |
-E | 使用扩展正则表达式。 |
-o | 只输出匹配到的部分,而不是整行内容。 |
-A [NUM] | 打印匹配行和之后的[NUM]行。 |
-B [NUM] | 打印匹配行和之前的[NUM]行。 |
-C [NUM] 或 --context=[NUM] | 打印匹配行及其前后的[NUM]行。 |
-P | 使用Perl正则表达式。 |
-r 或 --recursive | 递归搜索目录中的文件。 |
-R 或 --text | 将二进制文件当作文本文件处理。 |
-s 或 --no-messages | 不显示错误信息。 |
练习
①在 /var/log/messages
中查找所有包含 error
的行(忽略大小写)。
②·统计 /var/log/secure
中 Failed password
出现的次数。
③·列出 /etc
目录下所有包含 root
的配置文件名称。
④·从 /etc/passwd
中提取所有以 /sbin/nologin
结尾的行。
⑤·查找 /etc/ssh/sshd_config
中所有非注释行(排除以 #
开头的行)。
⑥·在 /var/log/boot.log
中显示匹配 fail
的行及其后 3 行内容。
⑦·递归搜索 /etc/yum.repos.d/
目录下所有包含 baseurl
的文件。
⑧·查找 /etc/fstab
中所有空行并显示行号。
2·find查找
find - 递归地在层次目录中处理文件
选项:
选项 | 作用 |
---|---|
-name | 根据关键字查找,支持通配符* |
-type | 根据文件类型查找 |
-size | 根据文件大小查找 |
-maxdepth | 指定查找时的路径深度 |
-exec | 将find命令查找到的内容交给-exec后面的命令再次处理 |
-user | 根据文件的属主进行查找 |
-perm | 根据文件的权限进行查找 |
文件类型:
-
普通文件: f
-
目录:d
-
连接文件: l
-
字符设备文件: c
-
块设备文件: b
练习
①·查找 /var/log/
下所有大于 10MB
的日志文件。
②·列出 /etc/
下所有属主为 root
的 .conf
文件。
③·将 /etc/nginx/
目录下所有 .conf
文件输出到终端
④·查找 /home/
下所有空文件。
⑤·使用 xargs
将 /var/log/
下所有 .log
文件
⑥·查找 /usr/lib/
下所有符号链接文件。
⑦·统计 /var/log/
目录下每个子目录中的文log件数量。
3·sort排序
以行对文件进行排序
选项 | 作用 |
---|---|
-f | 忽略大小写,会将小写字母都转换为大写字母来进行比较 |
-b | 忽略每行前面的空格 |
-n | 按照数值进行排序 |
-r | 反向排序 |
-u | 等同于uniq,表示相同的数据仅显示一行 |
-t | 指定字段分隔符,默认使用[Tab]键分隔 |
-k | 指定排序字段 |
-o<输出文件> | 将排序后的结果转存至指定文件 |
-h | 友好显示 |
4·uniq去重
uniq 是 Unix 和类 Unix 系统中的命令,用于从排序的文本数据中去除重复行,仅保留唯一的行。它通常与 sort 命令结合使用,因为 uniq 只能删除相邻的重复行。
语法:
uniq [options] [input_file [output_file]]
选项:
选项 | 作用 |
---|---|
-c | 进行计数,并删除文件中重复出现的行 |
-d | 仅显示连续的重复行 |
-u | 仅显示出现一次的行 |
-i | 忽略大小写 |
练习
①·对 /etc/passwd
按用户名(第一列)排序并去重。
②·将 /var/log/yum.log
按日期(第一列)排序。
③·合并 /var/log/messages
和 /var/log/secure
,去重后保存到 merged_logs.txt
。
④·统计 /var/log/secure
中每个 IP 地址出现的次数(需先排序)。
⑤·对 /etc/group
按组 ID(第三列)数值排序。
⑥·从 /var/log/maillog
中提取所有唯一的时间戳(格式 HH:MM:SS
)。
⑦·将 du -sh /var/log/*
的输出结果按文件大小降序排序。
⑧·找出 /etc/passwd
中仅出现一次的用户名(第 1 列)。
⑨·对 /var/log/yum.log
按日期排序,同日期时按时间排序。
四·总结
今日学习了vim命令和grep,find,sort,uniq命令,每个看似简单,但是进行组合的时候,就让我不知所措,练习中有很多错误答案,目前我难以处理,等待向老师请教后再来更改。
在经过老师的讲解,以及新命令的cut 学习,对练习进行了更改,可以更好的完成作业。