马哥预习课06_文本处理工具和正则表达式

▼文本工具

▷文件截取工具

●文件内容:less,more和cat,tac,rev
●文件截取:head和tail
●按列抽取:cut,paste
●关键字:grep

1. cat [OPTION] file 查看文本文件

[OPTION]
	-E	`显示行结束符$`
	-n	`显示行号`
	-A	`显示控制符`
	-b	`非空行编号`
	-s	`连续空行成一行`

`cat`
[root@CentOS7 dir1]$cat f1
abc
abcde
[root@CentOS7 dir1]$cat -E f1
123456$
12345$
1234$
123$

`tac上下倒序`
[root@CentOS7 dir1]$tac f1
abcde
abc

`rev左右倒序`
[root@CentOS7 dir1]$rev f1
cba
edcba

2. more [OPTION] file 分页查看

[OPTION]
	-d	`显示翻页提示`

b  `上一页`
空格  `下一页`
回车  `下一行`

3. less [OPTION] file 分页查看

/STRING		`搜索文本`
n			`下一个(搜索)`
N			`下一个(搜索)`
q			`退出`

*man命令使用less命令

4. head [OPTION] file

[OPTION]
	-c NUM	`选取前num字节`
	-n NUM	`选取前num行`
[root@CentOS7 dir1]$head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

`生成随机密码`
[root@CentOS7 dir1]$cat /dev/urandom | tr -dc [:alnum:] |head -c 8
7zy21yxo
[root@CentOS7 dir1]$

5. tail [OPTION] *file

[OPTION]
	-c NUM	`选取前num字节`
	-n NUM	`选取前num行`
	-f		`实时刷新文件`
	-F		`实时刷新文件/跟踪文件名`

tailf = tail -f

[root@CentOS7 dir1]$tail -n 3 /etc/passwd
jibill:x:1000:1000:jibill:/home/jibill:/bin/bash
tom99:x:800:1000:service:/data/tom:/bin/nologin
wang:x:1001:1001::/home/wang:/bin/bash

6. cut [OPTION] file

[OPTION]
	-d STRING 	`指定分隔符string,默认tab`
	-f NUM		`第num列`
	-c NUM		`按字符切割`
	--output-delimiter=STRING	`输出分隔符string`

[root@CentOS7 dir1]$cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp

`按字符分隔`
[root@CentOS7 dir1]$cat f4
123456i654321
12345i54321
1234i4321
123i321
[root@CentOS7 dir1]$cut -c2-3 f4
23
23
23
23
...

7. paste [OPTION] file

[OPTION]
	-d CHAR	`指定分隔符,默认tab`
	-s		`显示成行`

[root@CentOS7 dir1]$paste -d: f1 f3
123456:654321
12345:54321
1234:4321
123:321

▷文本分析工具

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

8. wc [OPTION] file

[OPTION]
	-l	`行数`
	-w	`单词数`
	-c	`字节数`
	-m	`字符数`
	-L	`最长行的长度`

[root@CentOS7 dir1]$wc /etc/passwd
  45   89     2352    /etc/passwd
  |    |        |         |
`行数` `字数` `字节数`    `文件名`

[root@CentOS7 dir1]$ls /run/media/root/CentOS\ 7\ x86_64/Packages/*.rpm |wc -l
10019

9.sort [OPTION] file文本排序

[OPTION]
	-r	`反向`
	-R	`随机`
	-n	`数字`
	-f	`忽略大小写`
	-u	`删除重复行`
	-t CHAR	`以CHAR为分隔符`
	-k NUM	`分隔后的第NUM列`

10. uniq [OPTION] file删除重复行

[OPTION]
	-c	`重复行出现次数`
	-d	`仅显示重复的行`
	-u	`仅显示不重复的行`

11.diff [OPTION] file1 file2

[root@CentOS7 dir1]$diff -u f1 f2
--- f1	2019-05-03 16:33:25.294186421 +0800
+++ f2	2019-05-03 15:48:55.998025353 +0800
@@ -1,2 +1,5 @@
-wang
-jibill
+1
+2
+3
+4
+5

12.patch [OPTION] file

`复原文件`
diff -u f1 f2 > file.patch
patch -b f1 file.patch

13. grep [OPTION] STRING file

[OPTION]
	-v	`显示不被匹配的行`
	-i	`忽略大小写`
	-n	`显示行号`
	-c	`统计行数`
	-o	`仅显示匹配到的STRING`
	-q	`不输出`
	-A NUM	`显示后NUM行`
	-B NUM	`显示前NUM行`
	-C NUM	`显示前后NUM行`
	-e	`or`
	-w	`匹配单词`
	-E	`使用ERE,扩展正则表达式,egrep`
	-F	`fgrep,不支持正则表达式`
	-f FILE	`从模式文件处理`

▼正则表达式

Regular Expressions:

  1. 基本正则表达式:BRE
  2. 扩展正则表达式:ERE
  3. 元字符:字符匹配、匹配次数、位置锚定、分组

▷字符匹配:

字符 用途
. 匹配单个字符
[] 中括号里任意字符
[^] 排除中括号里任意字符
[:alnum:] 字母和数字
[:digit:] 数字
[:alpha:] 字母
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和tab)
[:space:] 水平和垂直空白字符
[:cntrl:] 不可打印控制字符
[:graph:] 要打印的非空字符
[:print:] 要打印字符
[:punct:] 标点符号

▷匹配次数

字符 用途
* 匹配前面字符>0次
.* 匹配任意长度任意字符
\? 匹配前面字符0/1次
\+ 匹配前面字符>1次
\{n\} 匹配前面字符n次
\{m,n\} 匹配前面至少m次,最多n次
{,n\} 匹配前面字符最多n次
`{n,} 匹配前面字符最少n次

▷位置锚定

字符 用途
^ 行首
$ 行尾
^$ 空行
\<\b 词首
\>\b 词尾
\<WORD\> 整个单词

▷分组

字符 用途
\(WORD\) 字符串做为整体
\| 或者

分组引用

:	\(str1\+ \(str2\)* \)
	\1 : str1\+\)str2\)*
	\2 : str2

练习
在这里插入图片描述

▷扩展正则表达式

与正则表达式就差\

14. egrep [OPTION] PATTERN file

猜你喜欢

转载自blog.csdn.net/weixin_42758707/article/details/89787769