LinuxDay7——文本处理工具
一:常用文本处理工具
cat 查看文本
-n 显示行号
-A 显示换行符
-s 压缩连续的空行
-E 显示行结束符
tac 反转显示文本列
rev 反转显示文本行
more 分页显示
less 分页浏览
head 显示文件的头
-n # 显示前#行
-c # 显示前多少字符
tail 显示文件的尾
-n # 显示后#行
-c # 显示后多少字符
-f 跟踪文件变化
-F 跟踪文件名,在文件名变化时提示
cut 以列为单位来取
-d 指定分隔符,默认为tab
-f 指定列号
-c #-# 字符数
--output-delimiter=STRING 指定输出分隔符
paste 俩个文件列纵向合并,cat !* 俩个文件列横向合并
-d 指定分隔符
-s 所有行合并为一行
二:常用文本统计工具
wc 行数,单词数,字节数
-l 统计有多少行
-c 字节
-m 字符
-w 单词
-L 最长行的长度
sort 排序
-t 指定分隔符
-k 第几列排序
-n 按数字排序
-r 倒序
-R 随机排序
-u 去重
uniq 删除相邻的重复行合并一个行
-c 显示有几个相邻的行合并成一个
-u 仅显示不曾重复的行
diff 比较文件不同的行
-u 输出“统一的(unified)”diff格式文件
patch 通过diff的不同之处可以还原原文件
-b 恢复文件时备份旧文件,被恢复的文件会替换原文件
三、linux文本处理三剑客
grep:(基于行文本过滤)模式pattern工具
grep egrep(greap -E) fgrep(grep -F)(不支持正则表达式搜索)
sed:stream editor,
awk:linux上实现gawk,文本报告生成器
grep(支持基本正则表达式),egrep(支持扩展的正则表达式),fgrep(快速的grep,不支持正则表达式)
grep是一个最初用于Unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。
用法:
grep [OPTIONS] PATTERN [FILE...]
选项:
-E:== egrep 支持扩展的正则表达式
-F:== fgrep 快速的grep,不支持正则表达式,只匹配字符串
-G:== grep 支持基本的正则表达式
-P:== 支持Perl语言的正则表达式
--color=auto:被匹配的字符串颜色高亮显示
-v:显示没有被匹配到的行
-i:匹配字符串时忽略大小写
-o:只显示被匹配到的字符串
-q:静默模式,不显示任何信息
-n:显示被匹配到的行的行号
-c:统计被匹配到的行数
-e:或者,可以匹配多个pattern
-w:单词匹配
-f FILE:匹配文件中的pattern
-A#:显示被匹配到的行的后#行
-B#:显示被匹配到的行的前#行
-C#:显示被匹配到的行的前后各#行
四、基本正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
字符匹配
.:任意字符
[]:匹配指定范围内的单个字符
[^]:匹配指定范围外的单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配前边的字符任意次
.*:匹配任意字符任意次,表示所有
\?:匹配前边字符0或一次,表示前边字符可有可无
\{m\}:匹配前边字符m次
\{m,n\}:匹配前边字符最少m次,最多n次
\{,n\}:匹配前边字符至多n次
\{m,\}:匹配前边字符至少m次
位置锚定
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$:用于模式匹配整行
^$:匹配空行
^[[:space:]]*$:匹配空白行
\<或\b:单词锚定,用于单词模式的左侧
\>或\b:单词锚定,用于单词模式的右侧
\<PATTERN\>:匹配整个单词
\(\) 分组:将多个字符捆绑一起当做一个字符用
\|:或
\1:从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
\2:从左侧起,第二个左括号以及与之匹配右括号之间的模式所匹配到的字符
后向引用:引用前面的分组括号中的模式匹配字符,(而非模式本身)
Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名方式为\1,\2,\3...
五、VIM
用法:
vim [options] [file ..]
选项:
+#:打开文件时直接跳到第#行
+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首
-b:二进制方式打开文件
:%!xxd:扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd –r:扩展命令模式下,利用xxd命令转换回二进制
-d file1 file2…:打开多个文件比较,==vimdiff
-m:以只读方式打开文件
-e:打开文件时直接进入ex模式,或者使用ex file
vim的模式:命令模式,插入模式,扩展命令模式
在任意模式下用esc可以返回命令模式
命令模式(command mode)
命令模式下有些快捷指令不会显示,需要执行完全部命令才可以看到更改
命令模式-->插入模式:
i:在光标所在处变成插入模式
I:在行首变成插入模式
a:在光标下一个字符起变成插入模式
A:在行尾变成插入模式
o:在下一行另起一新行进入插入模式
O:在上一行另起一新行进入插入模式
在命令模式下的快捷操作
ZZ:保存退出
ZQ:不保存退出
.(点):重复上一个操作
光标跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
H:跳到当前页的页首
M:跳到当前页的页中
L:跳到当前页的页底
^:跳到行首的第一个非空白字符
0:跳到行首,==HOME键
$:跳到行尾,==END键
G:跳到文件最后一行
gg:跳到文件第一行
():句间跳转
{}:段落跳转
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏
n|N:搜索关键字间跳转下一个|上一个
字符操作:
x:剪切光标处的一个字符
~:转换大小写
J:删除当前行后的换行符
r:替换光标处的单个字符
R:进入REPLACE模式,替换光标所在字符,按esc回到命令模式
d:删除
dd 删除整行
d$ 删除从光标所在处到行尾
d^ 删除从光标所在处到非空行首
d0 删除从光标所在处到行首
dw 删除一个单词到下一个单词的首部
de 删除一个单词到这个单词的尾部
#dd 删除#行
D 从当前光标位置一直删除到行尾,留空行,等同于d$
y:复制
y$,y0,y^,yw,ye,#yy 类似于d命令的操作
Y 复制整行
p|P:整行,粘贴在行的下方|上方;非整行,粘贴在光标的后面|前面
c:删除后变成插入模式,修改命令
c$,c0,c^,cw,ce
cc 删除当前行并变成插入模式,== S
C 删除当前光标到行尾,并切换成插入模式
# i STRING [esc]:将STRING粘贴#次
0gU$|0gu$:将整行替换成大小|小写
撤销和撤销撤销:
u:撤销刚才更改
U:撤消光标落在这行后所有此行的更改
Ctrl - r:撤销最后的“撤消”更改
扩展模式(extended command mode)
:(冒号):命令模式-->扩展模式
w [FiLE]:保存和另存为
q:退出
x:保存并退出
!:强制执行,直接加命令可以执行系统上的命令,!r可以将命令的结果读入文件
r:读入文件
地址定界::start_pos,end_pos
#:具体指定#行
#,#:从#行到#行
#,+#:从#行往下#行
0:表示第一行
.:表示当前行
$:表示最后一行
%:表示全文
/PATTERN1/,/PATTERN2/:表示从第一次被模式匹配到的行到第二次被模式匹配到的行
后跟一个编辑命令,d,y,w,r等来操作指定范围的内容
查找替换
s:操作范围s/要查找的内容/替换为的内容/修饰符(g 全局;c 提示是否替换;i 忽略大小写)
/:分隔符也可用逗号,@等
查找模式
/
可视化模式
v:对字符操作
V:对行操作
Ctrl+v:对块操作
选择所操作的内容再使用d,y,p等命令操作文本
多文件模式
vim FILE1 FILE2 ...
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall
多窗口模式
多文件分割
vim -o|-O FILE1 FILE2 ...:水平|垂直分割俩个文件及多个文件窗口
单文件分割
在命令模式下 Ctrl+w,s|v :水平|垂直分割窗口
Ctrl+h|j|k|l:窗口间切换光标
Ctrl+w,q|o:取消相邻窗口|全部窗口
:wqall:退出全部文件和窗口
vim的寄存器
有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享;
寄存器名称a,b,…,z,格式:“寄存器 放在数字和命令之间;
未指定,将使用无命名寄存器;
有10个数字寄存器,用0,1,…,9表示,0存放最近复制内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能在不同会话间共享。
vim的个性化
全局配置文件:/etc/vimrc
用户配置文件:~/.vimrc
set:在扩展模式下执行或者写到配置文件中
nu 显示行号
ic 忽略字符大小写
ai 自动缩进
si 智能缩进
hlsearch 高亮搜索
list 显示Tab和换行符 ^I 和$
ff=dos|unix 启用Unix格式|Windows格式
textwidth=# 设置文本宽度
cursorline 设置光标所在行的标识线
paste 复制保留原格式
set all 或者 help option-list 获取set的帮助
syntax on|off 语法高亮
vimtutor
vim自带的官方学习及练习文档
附: