概述:
Linux核心哲学思想中很重硬件要的一条内容就是一切皆文件,在Linux系统上,无论硬件、软件、配置文件等等一切,都以文件形式呈现出来。一般文件类型有:普通文件、目录文件、链接文件、管道文件、套接字文件、字符设备文件、块设备文件等。而普通文件里面又有一些文本文件、二进制文件等细分化的文件类型,而我们日常系统管理工作,主要就是对一些文本类型的文件,进行新增、删除、修改、查询等相关操作,来完成系统的维护,那么对文本处理就变成了我们必不可少的基础既能。
本章就先简单介绍一些文本的查看,分析,统计工具,以及正则表达式和grep的相关内容,主要的内容包含以下几个部分:
1、文本查看工具介绍(cat、tac、rev、head、tail、more、less、cut、paste)
2、文本统计工具介绍(wc、sort、uniq)
3、文本比较工具介绍(diff、patch)
4、基本正则表达式和扩展正则表达式介绍
5、文本处理三剑客之grep介绍
涉及到的命令主要有:cat、tac、rev、head、tail、more、less、cut、paste、wc、sort、uniq、diff、patch、grep、egrep、fgrep
第一章 文本查看工具介绍
1、cat文本查看工具
语法:cat [OPTIONS] FILE
常用选项:
-n 显示行号,空白行也加
-b 显示行号,空白行不加
-ns 显示行号,然后出去重复的行显示为一行(相邻且相同)
-T 显示TAB键
-v 显示^M ,也就是\r 的内容,相当于显示Windows的换行键
-A 显示所有的内容,所有的隐藏字符,TAB、换行之类的
示例:
2、tac:文本查看工具,与cat一样,只是把cat的内容按行倒序显示
示例:
3、rev:反向显示文件中每一行的内容
例如:如文件中是abcdefg,如果用rev显示,则显示为gfedcba
4、head:显示文件的前几行,默认是前10行
语法:head [OPTIONS] FILE…
常见选项:
-n 数字:表示显示文件的前几行
-数字:与-n 数字 功能一样,显示文件的前几行
-c 数字:表示显示文件的前多少个字节,而不是多少行
示例:
5、tail:显示文件的后几行,默认是10行
语法:tail [OPTIONS] FILE…
常见选项:
-n 数字 :显示文件后几行
-数字:与-n 数字 功能一样,显示文件的后几行信息
-n +数字: 从第几行开始显示文件信息
-c 数字:显示文件的后多少个字节,而不是后几行
6、more:分页显示文件内容,只能向下翻页,不能向上翻页
选项:
-d 能显示提示信息
在more界面中,可以运行:
!执行外部命令
/string 搜索关键字
!COMMAND 在more界面下,执行bash命令结果显示在more界面中,不用退出more
q 退出more界面
7、less:分页显示文件内容,既能向上翻页,又能向下翻页
在less界面时:
/string 向下搜索关键字
?string 向上搜索关键字
n 按照搜索方向,顺向显示下一个匹配到的内容
N 按照搜索方向,逆序显示下一个匹配到的内容
!COMMAND 在less界面下,执行某命令,不用退出less
q 退出less界面
8、cut:字段截取工具,按照指定的分隔符进行分割后显示,默认分隔符为TAB键
语法:cut[OPTION]…[FILE]…
-d 指定分隔符,默认为tab
-f FILEDS
# 第#个字段
#,#,… 离散的多个字段,如-f1,3,6
#-# 连续的多个字段,如-f1-3
-c 按字符切割,取第几个字符到第几个字符数显示的内容
–output-delimiter=STRING 指定输出分隔符
示例:
9、paste:合并两个文件同行号的列到一行
选项:
-d 分隔符 合并时指定分隔符,默认为tab
-s 将一个文件所有行合并成一行显示
示例:
第二章 文本统计工具介绍
1、wc 统计工具
语法:wc [OPTION]… FILE
-l 显示多少行
-c 显示多少个字节,3个字节标识一个汉字,但是1个汉字只算一个字符
-w 显示单词数量
-m 显示字符数
示例:
2、sort 排序命令
语法:sort [OPTIONS]… FILE 排序时默认是按字符a-z排序
常用选项
-r 逆序显示
-n 按数字大小排序
-f 忽略字符大小写
-u 删除结果中的重复行(不管相不相邻,都去重)
-t STRING 选项使用指定字符做为字段界定符
-k X 选项按照使用上面-t字符分隔的X列来整理能够使用多次
示例:
3、uniq:去重显示,(相邻且相同才认为是重复)
语法:uniq [OPTION]… [FILE]…
-c: 显示每行重复出现的次数;
-d: 仅显示重复过的行;
-u: 仅显示不曾重复的行;
连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
示例:
第三章 文本比较工具介绍
1、diff 比较两个文件之间的不同之处
语法:diff [OPTIONS] FILE1 FILE2
常用选项:
-u 表示利用重定向,将不同之处生成补丁文件,以供利用patch还原用
示例:
2、patch补丁工具,复制改变的数据到文件中
语法:patch [OPTIONS] FILE PATCHFILE
选项:
-b 表示自动备份改变了的文件
示例:
第四章 基本正则表达式和扩展正则表达式介绍
1、基本正则表达式
字符匹配:
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[0-9]:匹配0-9之间的数字
[1-9]:匹配1-9之间的数字,注意向匹配10-19之间的数字不能写成[10-29],要每一位分别写[1-2][0-9]
[:digit:]:匹配数字
[:lower:]:匹配小写字母
[:upper:]:匹配大写字母
[:alpha:]:匹配所有大写和小写字母
[:alnum:]:匹配数字和大小写字母
[:punct:]:匹配标点
[:space:]:匹配空白字符
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
位置锚定:定位出现的位置
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定;用于单词模式的右侧
\<PATTERN\>:匹配整个单词
分组: \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)利用: \1, \2, \3, …来引用前面第一个括号、第二个括号…匹配到的内容
如: \(niwenchao\+\(nwc\)*\)
\1: niwenchao\+\(nwc\)*
\2: nwc
示例:
# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
2、扩展正则表达式
个人总结为:相比基本正则表达式,一些需要转义的位置,除了词首词尾锚定\<\>都不需要加转义符,另外增加了或关系的表达式(|)
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
[0-9]:匹配0-9之间的数字
[1-9]:匹配1-9之间的数字,注意向匹配10-19之间的数字不能写成[10-29],要每一位分别写[1-2][0-9]
[:digit:]:匹配数字
[:lower:]:匹配小写字母
[:upper:]:匹配大写字母
[:alpha:]:匹配所有大写和小写字母
[:alnum:]:匹配数字和大小写字母
[:punct:]:匹配标点
[:space:]:匹配空白字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+: 1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定:
^ :行首
$ :行尾
\<, \b :词首
\>, \b :词尾
分组:
()
后向引用: \1, \2, …
或者:
a|b
C|cat: C或cat
(C|c)at:Cat或cat
第五章 文本处理三剑客之grep介绍
grep:过滤出特定的行
grep 支持标准正则表达式
egrep 支持扩展正则表达式,相当于grep -E
fgrep 不支持正则表达式
语法:grep [OPTIONS] PATTERN [FILE…]
选项:
–color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写
-n: 显示匹配的行号,匹配到的是第几行
-c: 统计匹配的行数,匹配到了多少行
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A #: after, 后#行,除了显示匹配到的行外,还显示匹配到的行的后几行
-B #: before, 前#行,除了显示匹配到的行外,还显示匹配到的行的前几行
-C #: context, 前后各#行,除了显示匹配到的行外,还显示匹配到的行的前后各几行
-e:实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
多个-e 之间是或关系
-w:整行匹配整个单词,只能匹配整个单词,不能是一个单词的一部分,前后可以是符号,但是不能是字母
-E:使用ERE,相当于egrep
-F:相当于fgrep,不支持正则
nmap -sP -v 10.1.252.210/24 表示扫描该网段的主机
查看网段内有哪些主机处于连接状态:
nmap -sP -v 10.1.252.210/24 |grep -B1 “up”|grep -v “up”
正则表达式表示身份证号
1: [1-9]
2-6: [0-9]{5}
78: (19|20|21)
9-10 [0-9]{2}
11-12 ((0[1-9])|11|12)
13-14 ((0[1-9])|([12][0-9])|(3[0-1]))
15-17 [0-9]{3}
18 [0-9X]
# egrep "\<[1-9][0-9]{5}(19|20|21)[0-9]{2}((0[1-9])|(10|11|12))((0[1-9])|([12][0-9])|(3[0-1]))[0-9]{3}[0-9Xx]\>"
找出ifconfig命令结果中本机的所有IPv4地址
# ifconfig|grep -E -o "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/29961