文本以及文字处理linux应用实例 (Linux文本处理命令)

1 文本编辑工具之VIM

1.1 vi和vim简介

在Linux中我们经常编辑修改文本文件,即由ASCII, Unicode 或其它编码的纯文字的文件。

文本编辑种类:

  • 全屏编辑器:nano(字符工具), gedit(图形化工具),vi,vim
  • 行编辑器:sed

vi 编辑器:

Visual editor,文本编辑器,是 Linux 必备工具之一,功能强大,学习曲线较陡峭,学习难度大

vim 编辑器:

VIsual editor iMproved ,和 vi 使用方法一致,但功能更为强大,不是必备软件

1.2 使用 vim 初步

1.2.1 vim 命令格式

vim [选项]... 文件...
+# 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首
-b file 二进制方式打开文件
-d file1 file2… 比较多个文件,相当于 vimdiff
-m file 只读打开文件
-e file 直接进入ex模式,相当于执行ex file
-y file Easy mode (like "evim", modeless),直接可以操作文件,
:wq|q! 保存和不保存退出

说明:

  • 如果该文件存在,文件被打开并显示内容
  • 如果该文件不存在,当编辑后第一次存盘时创建它

1.2.2 三种主要模式和转换

vim 是 一个模式编辑器,击键行为是依赖于 vim的 的“模式”

三种常见模式:

  • 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
  • 插入(Insert)或编辑模式:用于修改文本
  • 扩展命令(extended command )或命令(末)行模式:保存,退出等

模式转换

命令模式 --> 插入模式

i    insert, 在光标所在处输入
I    在当前光标所在行的行首输入
a   append, 在光标所在处后面输入
A  在当前光标所在行的行尾输入
o  在当前光标所在行的下方打开一个新行
O  在当前光标所在行的上方打开一个新行
  • 插入模式 --- ESC-----> 命令模式
  • 命令模式 ---- : ----> 扩展命令模式
  • 扩展命令模式 ----ESC,enter----> 命令模式

案例: 插入颜色字符

切换至插入模式
按ctrl+v+[ 三个键,显示^[
后续输入颜色信息,如:^[[1;32mhello^[[0m
切换至扩展命令模式,保存退出
cat 文件可以看到下面显示

案例:

linux文本处理实用程序的共同特点,linux文本编辑教程学习

linux文本处理实用程序的共同特点,linux文本编辑教程学习

1.3 扩展命令模式

按“:”进入Ex模式 ,创建一个命令提示符: 处于底部的屏幕左侧

1.3.1 扩展命令模式基本命令

w:写(存)磁盘文件
wq:写入并退出
x:写入并退出
X:加密
q:退出
q!:不存盘退出,即使更改都将丢失 
r:filename 读文件内容到当前文件中
w:filename 将当前文件内容写入另一个文件
!command:执行命令
r!command:读入命令的输出

1.3.2 地址定界

格式:

:start_pos,end_pos CMD

linux文本处理实用程序的共同特点,linux文本编辑教程学习

1.3.2.2 地址定界后跟一个编辑命令

  • d #删除
  • y #复制
  • w file #将范围内的行另存至指定文件中
  • r file #在指定位置插入指定文件中的所有内容

1.3.3 查找并替换

格式:

s/要查找的内容/替换为的内容/修饰符

说明:

  • 要查找的内容:可使用基末正则表达式模式
  • 替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前 面查找时查找到的整个内容

修饰符:

  • i #忽略大小写
  • g #全局替换,默认情况下,每一行只替换第一次出现
  • gc #全局替换,每次替换前询问

查找替换中的分隔符/可替换为其它字符,如:#,@

案例:

s@/etc@/var@g
s#/boot#/#i

:15,19 s/^/#/     将文件中的第15行到第19行的行首添加#符号
:15,19 s/^#//     将文件中的第15行到第19行的行首#符号删除
:15,19 s/$/@/     将文件中的第15行到第19行的行尾添加@符号
:15,19 s/@$//     将文件中的第15行到第19行的行尾@符号删除   

1.3.4 定制vim的工作特性

扩展命令模式的配置只是对当前vim进程有效,可将配置存放在文件中持久保存

配置文件:

/etc/vimrc:全局
~/.vimrc:个人

1.3.4.1 行号

  • 显示:set number,简写 set nu
  • 取消显示:set nonumber,简写 set nonu

1.3.4.2 忽略字符的大小写

  • 启用:set ignorecase,简写 set ic
  • 不忽略:set noic

1.3.4.3 自动缩进

  • 启用:set autoindent,简写 set ai
  • 禁用:set noai

1.3.4.4 复制保留格式

  • 启用:set paste
  • 禁用:set nopaste

1.3.4.5 显示Tab和换行符 ^I 和$显示

  • 启用:set list
  • 禁用:set nolist

1.3.4.6 高亮搜索

  • 启用:set hlsearch
  • 禁用:set nohlsearch 简写:nohl

1.3.4.7 语法高亮

  • 启用:syntax on
  • 禁用:syntax off

1.3.4.8 文件格式

  • 启用windows格式:set fileformat=dos
  • 启用unix格式:set fileformat=unix
  • 简写 set ff=dos|unix

1.3.4.9 Tab 用空格代替

  • 启用:set expandtab 默认为8个空格代替Tab
  • 禁用:set noexpandtab
  • 简写:set et

1.3.4.10 Tab用指定空格的个数代替

  • 启用:set tabstop=# 指定#个空格代替Tab
  • 简写:set ts=4

1.3.4.11 设置文本宽度

  • set textwidth=65 (vim only)
  • set wrapmargin=15

1.3.4.12 设置光标所在行的标识线

  • 启用:set cursorline,简写 set cul
  • 禁用:set nocursorline

1.3.4.13 加密

  • 启用: set key=password
  • 禁用: set key=

1.3.4.14 了解更多

set 帮助

  • :help option-list
  • :set or :set all

1.4 命令模式

命令模式,又称为Normal模式,功能强大,只是此模式输入指令并在屏幕上显示,所以需要记忆大量的快捷按键才能更好的使用

1.4.1 退出VIM

  • ZZ 保存退出
  • ZQ 不保存退出

1.4.2 光标跳转字符间跳转:

  • h: 左 L: 右 j: 下 k: 上
  • #COMMAND:跳转由#指定的个数的字符

单词间跳转:

  • w:下一个单词的词首
  • e:当前或下一单词的词尾
  • b:当前或前一个单词的词首
  • #COMMAND:由#指定一次跳转的单词数

当前页跳转:

  • H:页首 M:页中间行 L:页底
  • zt:将光标所在当前行移到屏幕顶端
  • zz:将光标所在当前行移到屏幕中间
  • zb:将光标所在当前行移到屏幕底端

行首行尾跳转:

  • ^ 跳转至行首的第一个非空白字符
  • 0 跳转至行首
  • $ 跳转至行尾

行间移动:

  • #G 或者扩展命令模式下 :# 跳转至由第#行
  • G 最后一行
  • 1G, gg 第一行

句间移动:

) 下一句 ( 上一句

段落间移动:

} 下一段 { 上一段

命令模式翻屏操作

  • Ctrl+f 向文件尾部翻一屏
  • Ctrl+b 向文件首部翻一屏
  • Ctrl+d 向文件尾部翻半屏
  • Ctrl+u 向文件首部翻半屏

1.4.3 字符编辑

  • x 删除光标处的字符
  • #x 删除光标处起始的#个字符
  • xp 交换光标所在处的字符及其后面字符的位置
  • ~ 转换大小写
  • J 删除当前行后的换行符

1.4.4 替换命令(replace)

  • r 只替换光标所在处的一个字符
  • R 切换成REPLACE模式(在末行出现-- REPLACE -- 提示),按ESC回到命令模式

1.4.5 删除命令(delete)

  • d 删除命令,可结合光标跳转字符,实现范围删除
  • d$ 删除到行尾
  • d^ 删除到非空行首
  • d0 删除到行首
  • #COMMANDdd: 剪切光标所在的行
  • #dd 多行删除
  • D:从当前光标位置一直删除到行尾,等同于d$

1.4.6 复制命令(yank)

  • y 复制,行为相似于d命令
  • #COMMAND
  • yy:复制行
  • #yy 复制多行
  • Y:复制整行

1.4.7 粘贴命令(paste)

  • p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
  • P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

1.4.8 改变命令(change)

  • c: 删除后切换成插入模式
  • cc:删除当前行并输入新内容,相当于S
  • C:删除当前光标到行尾,并切换成插入模式,相当于c$

1.4.9 查找

  • /PATTERN:从当前光标所在处向文件尾部查找
  • ?PATTERN:从当前光标所在处向文件首部查找
  • n:与命令同方向
  • N:与命令反方向

1.4.10 撤销更改

  • u 撤销最近的更改,相当于windows中ctrl+z
  • #u 撤销之前多次更改
  • U 撤消光标落在这行后所有此行的更改
  • Ctrl - r 重做最后的“撤消”更改,相当于windows中crtl+y
  • . 重复前一个操作
  • #. 重复前一个操作#次

1.5 可视化模式

在末行有”-- VISUAL -- “指示,表示在可视化模式

允许选择的文本块

  • v 面向字符,-- VISUAL --
  • V 面向整行,-- VISUAL LINE --
  • ctrl-v 面向块,-- VISUAL BLOCK --

可视化键可用于与移动键结合使用

w ) } 箭头等

突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

案例:在文件每一行的行首插入#

  • 1、先将光标移动到第一行的行首
  • 2、输入ctrl+v 进入可视化模式
  • 3、输入 G 跳到最后1行,选中每一行的第一个字符
  • 4、输入 I 切换至插入模式
  • 5、输入 #
  • 6、按 ESC 键

一个vim就这么多个知识点。。。。

运维的坑有点深~