Linux 编辑器和文本处理

本篇主要分两类,一类是vim 这种交互式的文本编辑软件,另外就是各种花式的文本处理命令,有 awk、sed 这种强大的命令,也有简单的重定向和echo打印,指在提升文本处理效率


一、编辑软件

Linux 的编辑软件,当然得从vi和vim开始,由于 vim 功能强大,可能也无法覆盖到所有的操作方式,后续发现有趣的技巧,再继续补充上来,本章节的内容介绍vim的用法

vim 强大的编辑器

vi 与 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) 在命令模式输入 ':'  

常用命令:

  • q 退出
  • wq 保存退出
  • !q 强制退出,不保存
  • w 保存
  • set nu   显示行号 全写是number 可以缩写
  • set nonu  关闭行号显示
  • 输入/ 或 ? 查询

一些技巧

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"

未完待续

你可能感兴趣的:(知识系列,#,知识系列,Linux-基础知识,linux,运维,服务器)