文本处理工具基础应用

                                                                          文本处理工具


文本工具

文件查看命令: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

相关推荐

  • linux一周学习总结

          对于linux,之前也完全没有接触过,完全零基础小白。来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总结。 一、关于SHELL Shell     查询当前系统使用了哪个shell   &n…

    2017-07-15
  • Linux screen命令

    screen命令 一、简介 Screen是一款终端模拟的屏幕管理器,用于命令行终端自由切换。 当我们需要执行一个用时较多的作业,不希望自己或者他人误操作关闭终端导致作业中断,可以进入screen,这样,当终端关闭,作业仍会继续执行。 GNU’s Screen 官方站点:http://www.gnu.org/software/screen/ &nb…

    2017-07-13
  • 什么是网站流量、UV、PV、IP

    什么是网站流量,什么叫网站流量?     通常说的网站流量(traffic)是指网站的访问量,是用来描述访问一个网站的用户数量以及用户所浏览的网页数量等指标,常用的统计指标包括网站的独立用户数量、总用户数量(含重复访问者)、网页浏览数量、每个用户的页面浏览数量、用户在网站的平均停留时间等。     …

    Linux干货 2015-03-20
  • 文本处理三剑客之 Sed

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

    2017-08-26
  • 网络基础知识札记

    Linux网络属性管理(1)     Bell(AT&T), PARC(Xerox)        以太网     计算机网络:共享底层通信信道         CSMA/CD算法      &nbsp…

    Linux干货 2016-09-06
  • Apache、nginx 、lighttpd性能比较

    1. web服务器简介 1. lighttpd      Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web server环境         Lighttpd是一个具有非常低的…

    Linux干货 2015-04-10