一·故事背景
在之前基础的学习下,终于接触到了很重要的技术,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 学习,对练习进行了更改,可以更好的完成作业。
VIM操作与Linux文件目录检索学习
1070

被折叠的 条评论
为什么被折叠?



