文本处理工具及正则表达式

1、文本处理工具

1)cat命令
cat:
1.作用:将一个或多个文件或标准输入连接,并输出至标准输出,常用来查看文本文件内容
2.参数:
-E:用$表示行尾
-n:对所有行加行号
-s:相邻空行为一行
-T:显示^I代表TAB键
-e:等价于-vE
-A:等价于vET    # 用于配置文件或脚本文件的格式的排错
3.window文本文件换行:回车符和换行符
  Linux文本:只有换行符
示例:
[root@szb test]# cat -Tn file
     1  123
     2
     3
     4  ^I
     5  234
2)tac命令
tac:
1.作用:按照行的倒序的方法输出文本信息内容
[root@szb test]# echo -e "123\n234\n345" > file1
[root@szb test]# cat file1
123
234
345
[root@szb test]# tac file1
345
234
123
3)rev命令
rev:
1.作用:按照同一行内的前后内容也倒序输出
[root@szb test]# cat file1
123
234
345
[root@szb test]# rev file1
321
432
543
4)more、less命令
more:
1.作用:文件内容较多时,查看文本文件
2.注意:
more命令:显示到最后一行后会退出
less命令:默认不会退出
3.less命令查看:
b:回退到上一屏幕内容
g:可将光标切换到文件开始
G:切换到文件最后一屏内容
/string:向下搜索对应字符串,配合n实现同向查找
?string:向上搜索对应字符串,配合N实现逆向查找
5)head、tail命令
head:
1.作用:查看文本文件前多少行内容,默认前10行内容
2.参数:
-n:指定要显示的前多少行;head -n 2 file
-c:以字节为单位

tail
1.作用:查看文本文件最后多少行内容
2.参数
-n:指定要显示的结尾多少行
注意:当行数使用+号时,表示除了前n-1行的内容不输出,后面内容全部输出
eg:seq 6 | tail -n +3
-c:以字节为单位
-f:跟踪文件是否有追加内容,实时查看新发生的日志文件
注意:tailf命令和tail -f功能类似,但是查看文件不可访问时,会退出
示例:
[root@szb test]# echo abcdef | head -c -3
abcd[root@szb test]#
[root@szb test]# echo abcdef | head -c 3
abc[root@szb test]#

[root@szb test]# seq 6 | tail -n +3
3
4
5
6
6)wc命令
wc:
1.作用:统计文件和标准输入的文本行数、单词数、字节数和字符数
2.参数:
-l:只计数行数
-w:只计数单词总数
-c:只计数字节总数
-m:只计数字符总数
-L:显示文件中最长行的长度
[root@szb test]# wc -l file   # 行数
6 file
7)cut、paste命令
cut
1.作用:以指定的分隔符对文件或标准输入的每行内容进行切割
2.参数:
-b:仅显示指定以字节单位的范围的内容;与-n连用,不分割多字节字符,如汉字
-c:仅显示指定以字符单位的范围的内容
-d:指定字段的分隔符
-f:显示指定字段的内容,某列
--complement:与被选择的字节,字符或字段取反
--out-delimiter=<字段分割符>:指定输出内容的字段分隔符
3.注意:默认分隔符TAB
[root@szb test]# cut -d " " -f2 file1 # 字段分隔符空格, 取第二列
2
5
8
paste
1.作用:将两个文件合并为一个文件,默认以行为单位
注意:相同的行合为一行,默认TAB分隔符
2.参数:
-d:指定分隔符
-s:先将一个文件的所有内容合成一行
[root@szb test]# paste file1 file2
123     abc
456     def
789     ghi
[root@szb test]# paste -s file1 file2
123     456     789
abc     def     ghi
[root@szb test]# paste -d : file1 file2
123:abc
456:def
789:ghi
8)sort、uniq命令
sort
1.作用:按照一定的要求对文件的所有行进行排序,
2.注意:默认按照字母顺序进行排序。数字排序在字母前
3.参数:
-t:指定每行字段的切割符号
-k:指定排序字段的编号
-n:指定以数值为排序依据
-r:倒序排序
-R:随机排序
-u:将排序结果中相同的行,进行去重
[root@szb test]# sort -t : -k3 /etc/passwd | head -n3 # 冒号分割符,第三列进行排序
root:x:0:0:root:/root:/bin/bash
lighthouse:x:1000:1000::/home/lighthouse:/bin/bash
szb:x:1001:1001::/home/szb:/bin/bash

[root@szb test]# seq 4 | sort -R
2
1
4
3
uniq
1.作用:对指定文件生成报告信息和去重邻行重复行的内容
2.参数:
-c:显示连续重复行的重复次数
-d:只显示连续出现的重复行
-u:显示未曾连续出现的重复行
[root@szb test]# uniq -c file3
      3 123
      2 456
      1 67
      1 87
9)diff、patch命令
diff
1.作用:对比分析两个文件的不同之处
2.用法:diff file1 file2
3.参数:
-y:并排对比
-W:指定宽度
-u:使用unified格式(-第一个文件,+第二个文件)
4.符号解析
<:后面文件比前面文件少了一行内容
>:后面文件比前面文件多了一行内容
|:前后两个文件内容的有不同
[root@szb test]# diff -y -W30 file3 file4
123             123
123             123
123           <
456           <
456             456
67              67
87              87
patch
1.作用:结合diff输出的unified格式信息和两个文件的任一一个,就可以生成另外一个文件
2.参数:
-b:备份文件
[root@szb test]# diff -u file3 file4 > diff.log
[root@szb test]# patch -b file3 diff.log
patching file file3
[root@szb test]# ll
total 28
-rw-r--r--  1 root root 141 Jun 21 16:03 diff.log    # unified格式的差异
-rw-r--r--  1 root root  18 Jun 21 16:04 file3       # 和file4内容一样了
-rw-r--r--  1 root root  26 Jun 21 15:55 file3.orig  # file3文件备份
-rw-r--r--  1 root root  18 Jun 21 15:58 file4.bak   # 备份的文件
10)补充命令
1. ls -R /etc/   # 同时列出所有子目录层
2. dmesg         # 显示系统启动信息

2、文本处理工具grep

文本三剑客之一
grep命令
1.作用:匹配文本中内容
2.参数:
重点:
-i:忽略大小写
-n:显示匹配的行号
-c:统计匹配的行数
-o:仅显示被匹配的字符串
-v:显示不被pattern匹配的行
-e:实现多个选择的逻辑or关系

-A:after,后#
-B:before,前#
-C:context,前后各#

-q:静默模式,不输出任何信息;# 根据$?条件判断是否匹配
-w;匹配整个单词
-E:使用ERE
-f:根据模式文件处理
示例:
[root@szb test]# alias grep
alias grep='grep --color=auto'

[root@szb test]# grep -c root /etc/passwd
2

[root@szb test]# grep -e root -e szb /etc/passwd  # 或关系
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
szb:x:1001:1001::/home/szb:/bin/bash

[root@szb test]# grep root /etc/passwd | grep bash   # 与关系
root:x:0:0:root:/root:/bin/bash

3、正则表达式

正则表达式(Regular Expression):使用特定的符号(元字符)表示特定的功能
1. 元字符详情:man 7 regex
2. 正则表达式:
		  标准正则表达式
		  扩展正则表达式
3. 从功能上可以分四类:
		  字符匹配
		  次数匹配
		  位置锚定
		  分组和逻辑组合
1)正则表达式
正则表达式:
1.字符匹配
元字符列表:
.		表示任意单个字符
[]		表示指定范围内容的字符
[^]		排除[]内的字符以外的字符
[:alnum:]	代表大小写字母和数字
[:alpha:]	代表大小写字母
[:lower:]	代表小写字母
[:upper:]	代表大写字母
[:blank:]	代表空格和TAB
[:digit:]	代表数字,0-9
[:graph:]	代表可打印的非空白字符
[:print:]	代表可打印的字符
[:punct:]	代表标点符号
注意:正则表达式需要用""包裹起来;

2.次数匹配
*		代表匹配*前面的字符出现了任意次,包括0
\?		代表匹配其前面的字符出现了1次或者0
\+  	代表匹配其前面的字符出现了至少1
\{m\}	代表匹配其前面的字符连续出现了n次,n为数字
\{m,n\}	代表匹配其前面的字符次数要大于等于m次,小于等于n次
\{m,\}	代表匹配其前面的字符次数要大于等于m次
\{,n\}	代表匹配其前面的字符次数要小于等于n次

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

4.分组和逻辑处理
对于多个字符作为整体处理时,使用分组的元字符\(PATTERN\),后面引用使用\1,\2表示前面第一个分组,第二个分组,称为后向引用。
逻辑或:\|
示例:
1.字符匹配
[root@szb ~]# ifconfig eth0 | grep "[[:upper:]]"  # 使用[]指定范围
[root@szb ~]# grep "[^oot]" file

2.次数匹配
[root@szb ~]# grep "sz\{1,\}" file

3.位置锚定
[root@szb ~]# grep "^root" /etc/passwd  # 查看root开头的行
[root@szb ~]# grep "^[^#].*" /etc/fstab # 查找非#开头的行
[root@szb ~]# grep "bash$" /etc/passwd  # 查找以bash结尾的行

4.分组和逻辑或
[root@szb ~]# grep "\(root\)\{3\}" regex.txt  # 查看包含root连续出现3次的行
[root@szb ~]# grep "C\|at" regex.txt    # 匹配cat或Cat或C
[root@szb ~]# grep "\(C\|a\)t" regex.txt    # 匹配cat或Cat
2)扩展正则表达式
扩展正则表达式:
不需要\对特殊字符进行转义
注意:使用egrep或者使用grep -E实现使用扩展正则表达式

1.次数匹配
+

{m}
{m,n}

2.分组
()

3.逻辑或 |

4、vi/vim文本编辑器

1. 常用的文本编辑器:gedit、nano、sed等
注意:行结束符也算一个字符

2. vim 编辑器的三种工作模式:
	普通模式
	插入模式
	命令模式
1)普通模式
1.进入普通模式:vim file
2.普通模式进入插入模式:a,i,o,A,I,O;返回普通模式:ESC
3.普通模式进入命令模式::;返回普通模式:ESC
普通模式:
1.hlkj:以字符为单位移动光标,分别代表左右上下
2.web:以单词为单位移动光标,分别代表词首,词尾,上一词首
3.0^$:以行为单位移动光标,分别代表行首、行首、行尾
4.G/gg:以文章行号为单位移动光标,G前面加具体的行,gg代表第一行
5.():以句子为单位移动光标,分别代表上一句、下一句
6.{}:以段落为单位移动光标,分别代表上一个段落,下一个段落
7.HML:以当前屏幕为的行为单位移动光标,分别代表第一行,屏幕中间行,最后的行
8.ctrl+f/ctrl+b:以当前屏幕为单位移动光标,分别代表下移一屏幕,上一屏幕
9.ctrl+d/ctrl+u:以当前屏幕为单位移动光标,分别代表下移半个屏幕,上移半个屏幕

编辑操作:
1.x 	剪切
2.p		粘贴;P会将内容插入到当前所在的上一行位置
3.~		当前光标所在英文大小写转换
4.J		将当前光标所在行的行位和行符删掉
5.r		替换一个字符
6.R		替换多个字符
7.d		删除;加上右箭头或l,光标当前字符会被删除;加上左箭头或h,光标左边一个字符会被删除;dd删除当前所在行,5dd删除当前光标所在的5行内容
8.D		清除当前行所有内容,保留换行符
9.c		完成删除功能后vim将进入插入模式,d的话不会进入
10.u	撤销上一次编辑效果;6u回退6次编辑操作,U可以回退到所有编辑操作之前
11.ctrl+r	撤销之前的u回退操作
12. .	重复之前的命令;6.代表重复之前的操作6
13.v	进入可视化编辑;V以行为单位进行选中

复制:跟d用法类型
y	y$	y0	y^	
ye	yw	yy	Y
2)命令模式
命令模式:
1.冒号后输入一个数值号:直接跳转相应行的行首
2.:3d			删除第三行
3.3,5d			代表删除第三行到第5行的内容
4.点代表光标所在行,$文章最后一行,%1,$)代表全文
5.:/root/,3d	第一次出现root的行到第三行内容全部删除
6.:/root		查找文章中出现root的行
7.n/N			光标切换下一个匹配位置/上一个匹配位置
8.s/root/szb/g	将全文的root替换成szb,s替换(前面可加范围,1,8),g全局,gc有选择的替换;替换内容可以后向引用
1、vim寄存器:除了匿名寄存器,还有26个,a-z;
"ayy(双引号为寄存器标识符,a为寄存器名称,后面则是具体的命令)

2、vim编辑多个文件
:next	切换下一个文件
:prev	切换上一个文件
:first		切换到第一个文件
:last		切换到最后一个文件
:wqall	all代表一次退出所有文件

3、vim分屏显示
水平分隔: vim -o file1 file2
垂直分隔:vim -O file1 file2

4、vim配置文件
配置文件:/etc/vimrc
常用配置:
	set ic			开启忽略大小写
	set ai			开启自动缩进
	set si			开启智能缩进
	syntax on		开启语法高亮
	set list			显示tab和换行符

5、案例

示例1:
文件中搜索关键词:grep

示例2:
用简单的命令将三个文档合并成一个文档
cat file1 file2 file3 > file4

示例3:
查看访问日志的访问次数最多的前三个ip
cut -d " " -f1 access_log | sort | uniq -c | sort -nr | head -n 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值