本篇主要分两类,一类是vim 这种交互式的文本编辑软件,另外就是各种花式的文本处理命令,有 awk、sed 这种强大的命令,也有简单的重定向和echo打印,指在提升文本处理效率
Linux 的编辑软件,当然得从vi和vim开始,由于 vim 功能强大,可能也无法覆盖到所有的操作方式,后续发现有趣的技巧,再继续补充上来,本章节的内容介绍vim的用法
vi 是由 Bill Joy 在 1976 年开发的,Bill Joy 是加州大学伯克利分校的一名学生,他开发 vi 是为了满足自己的需要。vi 是第一个支持多窗口编辑的文本编辑器,它也是第一个支持语法高亮的文本编辑器。
vim 是由 Bram Moolenaar 在 1991 年开发的,Bram Moolenaar 是荷兰的一名程序员,他开发 vim 是为了满足自己对 vi 的需求。vim 是一个高度可定制的文本编辑器,它提供了许多强大的功能,如语法高亮、自动完成、多窗口编辑等。
vim 比 vi 更加强大和灵活。它具有更多的功能和选项,并且支持插件和扩展。然而,这也意味着 vim 的学习曲线比 vi 更陡峭。
简单来说,可以把 vi 类比自带的记事本,而 vim 那就是高级编辑器,功能更丰富和强大
注意如下的按钮和命令都需要是英文半角键盘,全角无法使用
全角模式间距比较大,容易区分,切换方式一般是 shift+空格 ;
如果不管用,试试右键菜单栏的‘中’字样,点击全半角(搜狗输入法有效)
asdf
按下: shfit + 空格
asdf
是编辑器的初始模式
进入方式:
1) vi filename
2) 输入模式时按 esc
3) 底线模式命令输入完毕后
可以编辑文本内容
进入方式:
1)命令模式点击 如下按键
a 在下一个字符插入光标
i 在光标位置插入光标
o 在下一行插入光标
可在底部执行命令的模式
进入方式:
1) 在命令模式输入 ':'
常用命令:
vim 很强大,可以复杂到大佬写书来讲解,然而我这就简单记录一些常用的操作
1、 u 撤回修改
按一次撤回一次,直到Already at oldest change
2、取消回撤
Ctrl + r ,取消回撤,这个和按键 u 相反
3、定位 光标‘跃迁’的技巧
操作按钮 | 用途 |
数字 + 箭头(← ↑ ↓ →) | 跳转到指定的行或者列 |
0 | 本行开头 |
$ | 本行结尾 |
gg | 本文首行 |
G | 本文末行 |
/ | 向下检索,再输入n 搜索下一个,N 搜索上一个 |
? | 向上检索,再输入n 搜索下一个,N 搜索上一个 |
4、编辑文本
下表的字母 ‘n’ 表示数字,剪切和粘贴只针对vim的剪切板
操作 | 用途 | ||
x | 删除当前字符 | X | 删除前一个字符 |
dd | 剪切当前行 | p | 粘贴剪切内容 |
nd+回车或 箭头(← ↑ ↓ →) | 剪切n行,或n列 | p | 粘贴剪切内容 |
yy | 复制当前行 | p | 粘贴复制内容 |
nyy | 复制n行内容 | p | 粘贴复制内容 |
yG | 复制当前行到最后一行的内容 | p | 粘贴复制内容 |
ygg | 复制当前行到第一行的内容 | p | 粘贴复制内容 |
v+箭头(← ↑ ↓ →) | 选中字符,可以叠加其他按钮 | V+箭头 | 选中一行或多行,也能叠加其他按钮 |
Ctrl + v | 区域选中,竖排选中,等价于编辑器的Shift + alt |
5、重复上次操作
'.' ,就是小数点 ,重复上一次的操作
Ctrl+u 可以删除本行光标之前的字符,这个和平时敲Linux命令一样
记得按ESC
命令 | 用途 |
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:r /path/to/file | 将文件内容填充到当前光标后面 |
:n1,n2s/word1/word2/g | 在n1-n2 之间的行,将word1 替换成word2 |
:1,$s/word1/word2/g | 在第一行到最后一行,将word1 替换成word2 |
:1,$s/word1/word2/gc | 在第一行到最后一行,将word1 替换成word2,替换前需要确认 |
重定向通常和管道同时出现,是一种工作中非常常见的编辑和处理文本的方式,这章节主要记录一些常用的重定向的方式
执行命令都会有标准输入 (stdin)和标准输出(stdout),标准错误输出(stderr)这些内容打印,一般是打印到控制台,我们可以通过重定向将内容指向到我们需要的文件
标准输入: 0
标准输出: 1
标准错误输出: 2
2>&1:将 2> 转到 1>,即将标准错误输出,当成标准输出打印
1>&2:将 1> 转到 2>,即将标准输出,当成标准错误输出打印
没文件就给你创建个文件也要写进去,当然要是没目录就没辙了,注意会覆盖原有内容
命令 | 用途 |
> filename | 清空文件内容,或者创建文件 |
echo $PATH > filename | 将环境变量覆盖写入文件 |
命令 2> filename | 将错误输出重定向到filename文件中 |
这个和上面那个不同点在于不覆盖,会追加
命令 | 用途 |
echo $PATH >> filename | 将环境变量追加写入文件,或者创建文件并写入内容 |
命令 2>> 文件 | 将标准错误输出,追加的方式重定向到一个文件中 |
命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中 |
命令 >> 文件 2>&1 | 将标准输出与错误输出共同写入到文件中 |
这个玩意,貌似单独用的少,平时也没咋用
命令 < 文件 将文件作为命令的标准输入,比如 wc < /etc/hosts
这个看着有点迷糊是吧,迷糊就正常了, 后面有案例,记住案例就行了,用处还是有的
命令 | 用途 |
命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
1、交互式往文本中覆盖写入内容
EOF 是上面说的分界符,可以自由定义,只是这个比较常用,也有喜欢用 . 的,看个人喜好
# cat << EOF > foo.txt
hello
world
EOF
# cat foo.txt
hello
world
2、清空文件内容
有时候日志文件在写入删除不了,内容无需备份且需要释放空间,试试清空文件吧
> filename
3、将执行结果丢弃,记得用>>
丢弃所有结果 ping 4个包,全丢弃
ping localhost -c 4 &>> /dev/null
丢弃错误结果 ping 4个包,丢弃报错的内容
ping localhost -c 4 2>> /dev/null
4、配置文件去除注释
将ftp 的备份配置文件中没注释的内容,覆盖写入到配置文件中
grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
5、重定向权限受限
普通用户通过sudo 提权编辑/etc/profile
sudo sh -c "echo 'TMOUT=1800' >> /etc/profile"
未完待续