文本处理工具基础应用

                                                                          文本处理工具


文本工具

文件查看命令: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用户和组命令

                        groupadd命令用户和工作组管理 groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。-g:指定新建工作组的id;  -r:创建系统工作组,系统工作组的组ID小于500; -K:…

    2016-02-09
  • shell脚本编程初步入门

    shell脚本编程初步入门    说到shell脚本编程,那我们就来先看下shell,shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统内核的一部分,但它调用了系统核…

    Linux干货 2016-08-15
  • 计划任务

    作业管理: Linux的作业控制(job )     前台作业:通过终端启动,且启动后一直占据终端;     后台作业:可通过终端启动,但启动后即转入后台运行(释放终端) 如何让作业运行于后台?     (1) 运行中的…

    Linux干货 2016-09-08
  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server缩写,linux虚拟服务器,担任负载调度器(load balance)的角色,它不提供任何服务,用户请求到这里的时候,它是将客户需求转发至后端真正提供服务的服务,LVS分为两部分组成,ipvsadm管理集群服务的命令行工具,ipvs,是内核模块。由于ipvs采用基于ip负载均衡技术,所以具有很…

    Linux干货 2016-10-30
  • N25-第三周作业

    1.列出当前系统所有已经登录的用户的用户名,注意同一个用户登录多次,只显示一次即可   who | cut -d" " -f1 |uniq 2.取出最后登录到当前系统的用户的相关信息    w | tail -1 3.取出当前系统上被用户当做其默认shell最多的那个shell &nbsp…

    Linux干货 2016-12-19
  • centos7上实现corosync V2 + pacemaker + pcs | crmsh备忘录

    1、集群配置的前提: 一、时间同步(ntpdate做crontab定时任务) 二、主机名和IP相互解析 三、基于ssh密钥主机互信 #ssh-keygen -t rsa #ssh-copy-id -i   集群的全生命周期管理工具: pcs: agent(pcsd) crmsh: agentless (pssh)     2、安…

    2017-11-15