文本处理工具基础应用

                                                                          文本处理工具


文本工具

文件查看命令:cat,tac,rev

cat:连接文件并显示到标准输出设备上

选项

-E:显示行结束符$

-n:对显示的每一行进行编号

-A:显示所有控制符

-b:非空行编号

-s:压缩连续的空行成一行

[root@localhost ~]# cat -n a ==>编号
     1	aaaaa
     2	
     3	
     4	eeeee
[root@localhost ~]# cat -E a ==>行结束符
aaaaa$
$
$
eeeee$
[root@localhost ~]# cat -A a ==>所有控制符
aaaaa$
$
$
eeeee$
[root@localhost ~]# cat -sn  a ==>压缩连续空行并编号
     1	aaaaa
     2	
     3	eeeee
[root@localhost ~]# cat -b  a ==>非空行编号
     1	aaaaa


     2	eeeee

tac:将文件以行尾单位反序输出 ==>和cat相反

[root@localhost ~]# cat a
aaaaa


eeeee
[root@localhost ~]# tac a ==>反序输出
eeeee


aaaaa
[root@localhost ~]#

rev:将文件的每行内容以字符为单位反序输出,即第一个最后输出,最后一个字符最先输出,依次

[root@localhost ~]# cat b
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]# rev b
01 9 8 7 6 5 4 3 2 1   ==>注意是以字符为单位反序输出

more:分页查看文件 ==>只能向前浏览

常用翻页快捷键:

space :每次翻一屏

enter:每次翻一行

b:显示上一屏内容

q:退出

less:和more相似 

常用翻页选项

PageUp:向上翻一行,

PageDown:向下翻一行

space :每次翻一屏

enter:每次翻一行

/pattern:搜索关键字

n/N:跳到上一个或者下一个关键字

head:显示文件前#行,默认显示10行

tail:显示文件的后#行。默认10行

[root@localhost ~]# cat a
aaaaa
11111
22222
eeeee
55555
66666
00000
[root@localhost ~]# head -3 a ==>显示前三行
aaaaa
11111
22222
[root@localhost ~]# tail -3 a ==>显示后三行
55555
66666
00000

选项:

-c #:指定获取前或后#字节

-n #:指定获取前或后#行

-# :指定行数

-f:跟踪显示文件新追加的内容,常用于日志监控

日志监控:tail -n 0 -f  /var/log/messages  只显示新日志信息,其他不显示

cut:显示行中的指定部分,删除文件中指定字段

-d 分隔符 :指明分隔符,默认tab

-f 字段:

   #:第#个字段

  #,#,#:离散的多个字段

   #-#:连续的多个字段

-c:按字符切割

简单实用案例

显示用户wangcai 默认的shell 程序

[root@localhost ~]# getent passwd wangcai
wangcai:x:4325:4325::/home/wangcai:/bin/bash
[root@localhost ~]# getent passwd wangcai|cut -d: -f7 ==>以:为分隔符,第七个字段就是shell
/bin/bash

paste:将多个文件按照队列进行合并

-d:指明分隔符,默认tab

-s:所有行合并一行显示

[root@localhost ~]# paste -d: a b ==>使用分隔符:来按照队列合并
aaaaa:
11111:1 2 3 4 5 6 7 8 9 10
22222:x c v b e r t y q qw
eeeee:
55555:
66666:
00000:
[root@localhost ~]# paste -s a b  ==>合并成一行显示
aaaaa	11111	22222	eeeee	55555	66666	00000
	1 2 3 4 5 6 7 8 9 10	x c v b e r t y q qw

wc:单词统计,显示单词字节行数

-c:显示字节

-l:显示行

-w:单词

[root@localhost ~]# cat -A a
aaaaa$
11111$
22222$
eeeee$
55555$
66666$
00000$
[root@localhost ~]# cat a |wc 
      7       7      42        ==>7行,7个单词,42个字节

sort:将文件排序,并将文件排序结果标准输出

-r:执行反向(由上至下)整理

-n:执行案数字排序

-f:选项忽略(fold)字符串的字符大小

-u:选项(独特,unique)删除输出中的重复行

-t c:选项使用做字段界定符

-k x:选项按照使用c字符分隔的x列来整理能够使用多次

[root@localhost ~]# sort -r a ==>方向排序
66666
55555
11111
00000


[root@localhost ~]# sort -n a ==>数字排序


00000
11111
55555
66666
[root@localhost ~]# sort -u a ==>删除重复行

00000
11111
55555
66666

以上为简单列子,实际运用后面作业里会详细说明

uniq:从输入中删除重复的前后相连接的行

-c:显示每行重复出现的次数

-d:仅显示重复过的行

-u:仅显示不重复的行

连续且完全相同为重复

[root@localhost ~]# uniq -c a ==>重复行出现次数
      1 11111
      2 
      1 55555
      1 66666
      1 00000
[root@localhost ~]# uniq -d a ==>仅显示重复行

[root@localhost ~]# uniq -u a ==>仅显示不重复行
11111
55555
66666
00000

diff:逐行比较文件的不同之处

[root@localhost ~]# ll hah/ ==>文件1,2,3
total 8
-rw-r--r-- 1 root root 6 Aug  5 20:41 1
-rw-r--r-- 1 root root 6 Aug  5 20:41 2
-rw-r--r-- 1 root root 6 Aug  5 20:40 3
[root@localhost ~]# ll heh/ ==>文件3,4,5
total 0
-rw-r--r-- 1 root root 0 Aug  5 20:40 3
-rw-r--r-- 1 root root 0 Aug  5 20:40 4
-rw-r--r-- 1 root root 0 Aug  5 20:40 5
[root@localhost ~]# diff heh  hah
Only in hah: 1
Only in hah: 2  ==>比较目录下相同文件名的文件,不会对目录中的文件进行比较
Only in heh: 4
Only in heh: 5

diff 命令的输出被保存在一种叫做“补丁”的文件中

    使用 -u 选项来输出“统一的(unified )”diff 格式文 件,最适用于补丁文件。

      

patch 命令复制在其它文件中进行的改变(要谨慎使用!)

    适用 -b 选项来自动备份改变了的文件

$ diff -u foo.conf-broken foo.conf-works > foo.patch

$ patch -b foo.conf-broken foo.patch

文本处理三剑客:

grep :(global search regular expression(RE) and print out the line

       文本搜索工具,根据用户指定的”模式“对目标文本逐行进行匹配检查,显示匹配到的行

模式:有正则表达式字符及文本字符所编写的过滤字符条件

选项:

–color=auto:对匹配到的文本着色显示; ==>centos7上以定义别名alias grep='grep –color=auto'

-v:显示不能被模式匹配到的行

-i:忽略字符大小写

-n:显示匹配到的行号

-c:统计匹配的行数

-o:仅显示匹配到的字符串

-q:静默模式,不输出任何信息

-A #:after,显示后#行

-B #:before, 显示前#行

-C #:context,前后各#行

-e:实现多个选项间的逻辑er关系

     grep –e ‘cat ’ -e ‘dog’ file

-w:整行匹配整个单词

-E:支持ERE(扩展正则表达式)

[root@localhost ~]# cat a

11111
AAAAA
aaaaa
55555
66666
00000
[root@localhost ~]# grep -i 'a' a   ==>忽略大小写,匹配到aaaaa和AAAAA
AAAAA
aaaaa
[root@localhost ~]# grep -c 'a' a   ==>匹配到一次
1
[root@localhost ~]# grep -ci 'a' a  ==>匹配到两次
2
[root@localhost ~]# grep -o 'a' a   ==>仅显示匹配的内容
a
a
a
a
a
[root@localhost ~]# grep -oi 'a' a  ==>仅显示匹配的内容
A
A
A
A
A
a
a
a
a
a
[root@localhost ~]# cat a|grep -A2 "a" ==>匹配的后两行
aaaaa
55555
66666
[root@localhost ~]# cat a|grep -B2 "a"  ==>匹配的前两行
11111
AAAAA
aaaaa
[root@localhost ~]# cat a|grep -C2 "a"  ==>匹配的前后各两行
11111
AAAAA
aaaaa
55555
66666

基本正则表达式的元字符:

字符匹配:

.  :匹配任意单个字符

[] :匹配指定范围内的任意单个字符

[^]:匹配指定范围内的任意单个字符

[:digit:]:数字

[:lower:]:小写字母

[:upper:]:大写字母

[:alpha:]:所有字母

[:alnum:]:所有数字和字母

[:space:]:空白字符(包含空格和tab)

[:punct:]:标点符号

[root@localhost ~]# cat a|grep 'A'  ==>匹配字符A
AAAAA
[root@localhost ~]# cat a|grep '[^A]' ==>匹配A以外的任意字符
11111
aaaaa
55555
66666
00000
[root@localhost ~]# cat a|grep '[[:digit:]]' ==>匹配数字
11111
55555
66666
00000

次数匹配

*   :匹配前面的字符任意此,包括0次  ==>默认贪婪模式,尽可能长的匹配

.*  :任意长度的任意字符

\? :匹配其前面的字符0次或1次

\+  :匹配前面的字符至少一次

\{m\}:匹配前面的字符m次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{,n\} :匹配前面的字符至多n次

\{m,\}:匹配前面的字符至少m次

位置锚定

^  :行首锚定,用于模式的最左侧

$  :行尾锚定,用于模式的最右则

^pattern$ :用于模式匹配整行

^$:空行

^[[:space:]]*$ :空白行

\<或\b:词首锚定,用于单词模式的左侧

\>或\b:词尾锚定,用于单词模式的右侧

\<pattern\>:匹配整个单词

小使用案例:

执行了指令:grep "\<[0-9]\{2,3\}\>" /etc/passwd

blob.png

说明:

\< \>:锚定了词首和词尾,说明匹配的是整个单词

[0-9]:数字

\{2,3\}:前面数字出现了2-3次

/etc/passwd  :指定文件

上面表示找出/etc/passwd文件中的两位数或三位数

分组及引用

分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如\(root\)

      分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,

      这些变量的命名方式为:\1,\2,\3,….

      \1:表示从左侧起,第一个左括号以及与之匹配右括号之前的模式所匹配到的字符

      实例:\(string1\+\(string2\)*\)

            \1:string\+\(string2\)*

            \2:string2

后向引用:引用前面的分括号中的模式所匹配字符(而非模式本身)

blob.png

blob.png

egrep:扩展正则表达式,和grep  -E效果相似

字符匹配:

.  :任意单个字符

[] :指定范围内的字符

[^]:指定范围外的字符

次数匹配:

*  :匹配前面字符任意次

? :0次或1次

+  :至少一次

{m} :匹配m次

{m,n}:匹配至少m次,至多n次

位置锚定:

^:锚定行首

$:锚定行尾

\<或\b:锚定词首

\>或\b:锚定词尾

上面的小案例,使用扩展正则表达式来解决

blob.png

\< \>:锚定词首词尾,匹配单词

[0-9]:数字

{2,3}:2次或者3次,这里和上面的不同,没有使用转义符"\"

/etc/passwd:文件

找出/etc/passwd文件中的两位数或三位数,和上面结果一样

分组:

()

 后向引用: \1,\2

或者

a|b

C|cat  :C或者cat

(C|c)at: Cat或cat

扩展正则表达式其实和基本正则表达式差不多,差异在于,扩展正则表达式在使用元字符时,

不需要用于转义的"\"

以上都是些概念性的知识,不是很好理解,在博客作业中有实际用法

原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/29734

(0)
qiuweiqiuwei
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • sed基础

    sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操…

    Linux干货 2017-05-01
  • 计算机组成及Linux基础

    计算机组成及Linux基础

    Linux干货 2018-03-04
  • 马哥教育网络班22期+第1周课程练习

    1、描述计算机的组成及其功能 CPU:运算器、控制器、寄存器、缓存 存储器:内存,RAM(Random Access Memory) Input:下指令,提供数据等 Output:输出数据加工的结果 2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 Debian系列         ubuntu &n…

    Linux干货 2016-08-15
  • 认识DNS

    DNS全称是Domain Name System的简称,即域名系统。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP/TCP协议之上,使用端口号53。 认识DNS 安装 创建一台DN…

    Linux干货 2016-12-07
  • Mysql之运用MHA的功能实现服务高可用

    MHA介绍 (Master High Availability) MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供 了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的 master 节点,在此期间,…

    2017-09-14
  • Linux基础知识—Vim编辑器/crond周期性任务计划

    vim文本编辑 vim是vi文本编辑的增强版本,因其编辑功能强大、且支持各种语言开发环境关键字自动增亮功能,也可称为是开发工具。在Centos7/RHEL7开始,默认将vi定义成vim –color=auto,已经取代了vi的地位。下面总结下关于vim工具的使用 vim有三种模式,每个模式下有其特定的功能;我们可自由在三者之间切换使用: COMM…

    Linux干货 2016-11-01