文本编辑工具vim

1 文本编辑工具vim

1.1 vi 和 vim 简介

文本编辑种类:

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

1.2 使用vim初步

1.2.1 vim命令格式

vim  [OPTION] FILE

//如果文件名存在,文件则被打开显示文件,如果文件不存在,当编辑后第一次存盘时创建它

1.2.2 三种主要模式和转换

  • 命令或普通模式:默认模式,观察文件内容,可以实现移动光标,粘贴复制文本

  • 插入或编辑模式:用于修改文本

  • 扩展命令或命令行模式:保存,退出等
    模式转换:

  • 插入模式:ESC——命令模式

  • 命令模式::——扩展命令模式

  • 扩展命令模式:ESC,enter——命令模式

1.3 扩展命令模式

1.3.1 扩展命令模式基本命令

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

1.3.2 地址定界

格式:

:start_pos,end_pos CMD

1.3.3 查找并替换

格式:

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

修饰符:
i 忽略大小写
g 全局替换,默认情况下,每一行只替换第一次出现
gc 全局替换,每次替换前替换

查找替换中的替换符/可替换为其他字符,如 #,@

1.3.4 定制vim的工作特性

配置文件:
/etc/vimrc #全局
~/.vimrc #个人
行号:
显示:set number 简写:set nu
取消显示:set nonumber 简写:set nonu
忽略字符的大小写:
显示:set ignorecase 简写:set ic
取消显示:set noic
自动缩进:
显示:set ai
取消显示:set noai
复制保留格式:
显示:set paste
取消显示:set nopaste
显示Tab和换行符^|和$显示:
显示:set list
取消显示:set nolist
高亮搜索:
显示:set hisearch
取消显示:set nohisearch
语法高亮:
显示:syntax on
取消显示:syntax off
文件格式:
启用windows格式:set fileformat=dos
启用unix 格式:set fileformat=unix
简写:set et
Tab用空格表示:
显示:set et 默认为8个空格代替Tab
取消显示:set noet
Tab用指定空格的个数代替:
显示:set ts=# 指定#个空格代替Tab
设置文本宽度:
set textwidth=65 (vim only)
设置光标所在行的标识线:
显示:set cul
取消显示:set nocul
加密:
显示:set key=password

1.4 命令模式

退出VIM
ZZ 保存并退出
ZQ 不保存退出
光标跳转
1. 字符间跳转
h:左移一格 l:右移一格 j:下移一格 k:上移一格(前面加数字代表移几格)
2.单词间跳转
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
(前面加数字代表移几个)
3.当前页跳转
H:行首 M:页中间行 L:页底
zt:将光标所在当前行移到屏幕顶端
zz:将光标所在当前行移到屏幕中间
zb:将光标所在当前行移到屏幕低端
4.行首行尾跳转
^:跳转到行首的第一个非空白字符
0:跳转至行首
$:跳转至行尾
5.行间移动
#G:(或者扩展命令模式下):#代表跳转至第#行
G:最后一行
1G,gg: 第一行
6.句间移动
):上一句
(:下一句
7.段落间移动
}:下一段
{:上一段
8.命令模式翻屏操作
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
字符编辑
x 删除光标处的字符
#x 删除光标处起始的第#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
J 删除当前行后的换行符
替换命令
r 只替换光标所在处的一个字符
R 切换成replace模式,按esc回到命令模式
删除命令
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dd 剪切光标所在行
#dd 多行删除
D 从当前光标位置一直删除到行尾,等同于ds
复制命令
y 复制
yy 复制整行
#yy 复制多行
Y 复制整行
粘贴命令
p 粘贴在后方
P 粘贴在前方
改变命令
c 删除之后切换到插入模式
cc 删除当前行并输入新内容(改变模式),相当于S
C 删除当前光标到行尾,并切换成插入模式
查找
/PATTERN 从当前光标所在处向文件尾部查找
?PATTERN 从当前光标所在处向文件首部查找
n 与命令同方向
N 与命令反方向
撤销更改
u 撤销最近的更改
#u 撤销之前多次更改
U 撤销光标落在这行后所有此行的更改
. 重复前一个操作
#. 重复前一个操作#次
Ctrl -r 重做最后的“撤销”更改

100incy [esc]

//复制ncy100次

  • di" 光标在“ ”之间,则删除“ ”之间的内容
  • yi( 光标在()之间,则复制()之间的内容
  • vi[ 光标在[]之间,则选中[]之间的内容
  • dtx 删除字符直到遇见光标之后的第一个x字符
  • ytx 复制字符直到遇见光标之后的第一个x字符

1.5 可视化模式

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

1.6 多文件模式

vim FILE1 FILE2 ···

//打开多个文件
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 不保存退出所有
:wqall 保存退出所有

1.7 多窗口模式

多文件分割
vim -o|-O FILE1 FILE2···
-o 水平或上下分割
-O 垂直或左右分割
在窗口间切换:Ctrl+w
单文件窗口分割
Ctrl+w,s 水平分割,上下分屏
Ctrl+w,v 垂直分割,左右分屏
ctrl+w,q 取消相邻窗口
ctrl+w,o 取消全部窗口
:wqall 退出

2.1 查看文本文件内容

2.1.1 cat

cat 可以查看文件内容
格式:

cat [option] [file]

option:
-E 显示行结束符$
-A 显示所有控制符
-n 对显示出的每一行进行编号
-b 非空行编号
-s 压缩连续的空行成一行

2.1.2 nl

nl显示行号,=cat -b

2.1.3 tac

tac 逆向显示文本内容

2.1.4 rev

将同一行的内容逆向显示
查看非文本内容

2.1.5 hexdump、od、xxd

2.2 分页查看文件内容

2.2.1 more

more可以实现分页查看文件,可以配合管道实现输出信息的分页
格式:

more [option] [file]

选项:
-d 显示翻页及退出提示

2.2.2 less

less也可以实现分页查看文件或STDIN输出,less命令是man命令使用的分页器

2.3 显示文本前或后文本内容

2.3.1 head

可以显示文件或标准输入的前面行
格式:

head [option] [file]

选项:
-c # 指定获取前#字节
-n# 指定获取前#行

2.3.2 tail

可以显示文件或标准输入的倒数行
格式:

tail [option] [file]

2.4 按列抽取文本cut

cut可以提取文本文件或STDIN数据的指定列
格式:

cut [option] [file]

选项:
-d 指明分割符,默认为tab
-f #,代表第#个字段
#,# 分开的多个字段
#-# 连续的多个字段
混合使用:1-3,7
–output-delimiter=“+” 指定分割符为“+”

2.5 合并多个文件paste

paste合并多个文件同行号的列到第一行
格式:
paste [option] [file]
选项:
-d 分割符:指定分割符,默认为tab
-s:所有行合成一行显示

2.6 分析文本的工具

文本数据统计:wc
整理文本:sort
比较文件:diff 和 patch

2.6.1 收集文本统计数据wc

wc可用于统计文件的行总数,单词总数,字节总数和字符总数
可以对文件或标准输入中的数据统计
格式:

wc [option] [file]

选项:
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

wc file

//默认显示 行数 单词数 字节数

2.6.2 文本排序sort

把整理过的文本显示在标准输出,不改变原始文件
格式:

sort [option] [file]

选项:
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序
-f 选项忽略字符串中的字符大小写
-u 合并重复项,即去重
-t c 选项使用c作为字段界定符
-k # 选项按照使用c字符分隔的#列来整理能够使用多次

2.6.3 去重uniq

uniq命令从输入中删除前后相接的重复的行
格式:

uniq [option] [file]

选项:
-c 显示每行重复出现的次数
-d 仅显示重复过的行
-u 仅显示不曾重复过的行

sort 和 uniq 经常一起使用 先排序 再去重

2.6.4 比较文件

diff
比较两个文件之间的区别
选项:
-u 将两个文件详细做比较
cmp
查看二进制文件的不同

3 正则表达式

由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意思,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式分类:

  • 基本正则表达式:BRE
  • 扩展正则表达式:ERE

正则表达式元字符分类:字符匹配、匹配次数、位置锚定、分组

3.1 基本正则表达式元字符

3.1.1 字符匹配

. 匹配任意单个字符,可以是一个汉字
[ ] 匹配指定范围内的任意单个字符,例:[a-z] [0-9] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,例:[^0-9]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符
[:lower:] 小写字母,相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符
[:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

3.1.2 匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次
.* 任意长度的任意字符
\? 匹配前面的字符0或1次,即可有可无
\+ 匹配前面的字符至少一次
\{n\}匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\] 匹配前面的字符至多n 次
\{n,\} 匹配前面的字符至少n次

3.1.3 位置锚定

可以用于定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\<\b 词首锚定,用于单词模式的左侧
\>\b 词尾锚定,用于单词模式的右侧
\^PATTERN\> 匹配整个单词

3.1.4 分组

()将多个字符捆绑在一起,当做一个整体处理

3.1.5 或者

\|表示

4 文本处理三剑客

4.1 文本处理三剑客之grep

用于文本搜索工具,根据用户指定的“模式”对目标文本逐步进行匹配检查,打印匹配到的行。
模式:由正则表达式字符及文本字符所编写的过滤条件。
格式:
grep [option] pattern [file]
常见选项:
-color 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 忽略匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # 指 ‘after’ 后#行
-B # 指‘before’ 前#行
-C # context 前后各#行
-e 实现多个选项间的逻辑or关系
-w匹配整个单词
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-f file 根据模式文件处理
-r 递归目录,但不处理软链接
-R 递归目录,但处理软链接

4.2 文本处理三剑客之sed

4.2.1 sed工作原理

sed是行编辑器,是从文件或管道中读取一行,处理一行,输出一行,再读取一行,再处理一行,在输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。

4.2.2 sed基本用法

格式:

sed [option] 'script;script;...' inputfile...

选项:
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f file 从指定文件中读取编辑脚本
-r,-E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
script格式:

‘地址命令’

地址格式:在这里插入图片描述
命令:在这里插入图片描述

4.2.3 sed高级用法

在这里插入图片描述

4.3 文本处理三剑客之awk

4.3.1 awk工作原理和基本用法说明

报告生成器,格式化文本输出
格式:

awk [option] 'program' var=value file...
awk [option] -f programfile var=value file...

program通常是被放在单引号中,并由三种部分组成

  • BEGIN 语句块
  • 模式匹配的通用语句块
  • END 语句块
    选项:
  • -F “分隔符”指明输入时用到的字段分割符,默认的分隔符是若干个连续空白符
    • v var=value 变量赋值
      program格式:
pattern {action statements;...}

4.3.2 动作 print

格式:

print item1,item2,...

说明:

  • 逗号分隔符
  • 输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
  • 如省略item,相当于print $0
  • 固定字符需要用“”引起来,而变量和数字不需要

4.3.3 awk 变量

awk变量分为:内置和自定义变量
常见的内置变量:
FS :输入字段分隔符,默认为空白字符,功能相当于-F
OFS:输出字段分隔符,默认为空白字符
RS:输入记录record分隔符,指定输入时的换行符
ORS:输出记录分隔符,输出时用指定符号代替换行符。
NF:字段数量
NR:记录的编号
FNR:各文件分别计数,记录的编号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数
自定义变量:
自定义变量是区分字符大小写的

  • -v var=value
  • 在program中直接定义

4.3.4 动作printf

printf 可以实现格式化输出
格式:

printf "FORMAT",item1,item2,...
  • 必须指定FORMAT
  • 不会自动换行,需要显示给出换行控制符\n
  • FORMAT中需要分别为后面每个item指定格式符
    格式符:与item一一对应
    %c: 显示字符的ASCII码
    %d,%i 显示十进制整数
    %e,%E:显示科学记数法数值
    %f:显示浮点数
    %g,%G:以科学记数法或浮点形式显示数值
    %s:显示字符串
    %u:无符号整数
    %%:显示%自身
    修饰符
    #[.#] 第一个数字控制显示的宽度,第二个#表示小数点后精度
    - 左对齐
    + 显示数值的正负符号

4.3.5 操作符

算术操作符:
x+y, x-y, x*y, x/y, x^y , x%y
-x:转换为负数
+x:将字符串转换为数值
字符串操作符:没有符号的操作符,字符串连接
赋值操作符:
=, +=, -=, *=, /=,%=,^=, ++, –
比较操作符:
==, !=,> , >=, <, <=
模式匹配符:
~ 左边是否和右边匹配,包含关系
!~ 是否不匹配
逻辑操作符:
与:&& 并且关系
或:|| 或者关系
非:! 取反

4.3.6 模式pattern

pattern:根据pattern条件,过滤匹配的行,在做处理
如果未指定:空模式,匹配每一行

4.3.7 continue 和 break

continue 中断本次循环
break 中断整个循环

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值