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格式:
- v var=value 变量赋值
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 中断整个循环