文本处理、正则表达式、cut、grep、egrep、fgrep

文本处理、正则表达式、cut、grep、egrep、fgrep

Linux中文本处理工具最常用的就是文本处理三剑客grep、sed、awk再配合正则表达式,可以实现足够多的文本处理功能。工具的强大之处是因为使用它的人,如何才能发挥文本处理工具的作用呢?答案就是正则表达式,其实正则表达式,只是一种思想,一种表示方法,只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串。这部分内容可以说是学习shell脚本之前必学的内容,理解越深刻那么shell脚本编写能力就会越强。

文本处理

  1. 文本查看工具 

    • cat -n(包含了$回车符),-b-A(-vTE),-e(-vE),-v(有^M无^T),-s-E(回车)

    • tac -n-b-A(-vTE),-e(-vE),-v(有^M无^T),-s-E(回车)

    • rev

    • more -d(加提示),只能下翻,能命令

    • less PgUP翻页,能搜,能命令

    • head -n 前几行,默认10行

    • tail -n 后几行,默认10行,-f /var/log/messages前端监控日志,tail -n 0 -f

    • /var/log/message &后端显示新日志,不影响使用,fg 1切换前台,ctrl c终止

  2. cut 

    • cut -d-f1-5,6,7 /etc/passwd # : 号截取,第几段 –output-delimiter=+ # 替换分隔符

    • cut -c44-46 file #字符截取,监控磁盘

  3. paste 横向合并两个文件 

    • paste -d: #指定横向分隔的符号,默认Tab

    • paste -s #一个文件的内容合并成一行显示

  4. wc (word count) #字符收集统计数据 

    • wc file #行、单词、字节

    • wc -m #统计字符数

    • wc -l #统计行数

    • wc -w #统计以标点或space隔开的单词数

    • wc -c #统计字节数

    • wc 输入字符,最后输入空格开的被统计字符,再ctrl d

  5. sort #文本排序 

    • sort -t ‘.’ #使用 . 做为字段界定符

    • sort -r #反序

    • sort -f #忽略字符串中的大小写

    • sort -n #按数字排序

    • sort -u #去除重复行

    • sort -k3 #按 . 分隔符根据第3列来整理,可重复多次

    • sort -ut ‘.’ -k3 #按 . 分隔符根据第3列来整理并归类,去除不属于该类的行

  6. uniq #从输入中山城重复的前后相接的行 

    • uniq file #合并相邻的重复行

    • uniq -c file #显示合并的重复次数

    • uniq -d file #只显示重复的行

    • uniq -u file #显示不重复的行

  7. diff #比较两个文件之间的区别 

    • diff xx yy

    • diff -c xx yy

    • diff.jpg

    • 其中1-3表示行号c表示不同,常用的a表示多余的行,d表示删除的行,即少的行,<表示第一个文件,>表示第二个文件。。diff -c 会以上下文的形式显示两个文件的不同之处,文件时间不同也会进行比较,行中不同的地方会在此行前加”!”:

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

  8. patch #复制对文件改变 

    • patch -b #自动备份改变了的文

    • diff -u xx yy>zz.patch

    • patch -b xx zz.patch

  9. grep:global serarch REgular expressin and print out the line 

    • grep -E = egrep、grep -F fgrep(不支持正则表达式)

    • .bashrc加入alias grep=’grep –color=auto’

    • grep xxxx /etc/passwd /etc/group …. 在centos7上带颜色

    • grep ‘$USER’ / “$USER” / whoami /etc/passwd

    • grep -v string #显示不包含string的行,排除

    • grep -i String #忽略大小写

    • grep -n string #显示包含string的行号

    • grep -c string #统计string的行数

    • grep -o strng #仅显示string,配合正则表达式,精确匹配

    • grep -q string #静默模式,echo $?看看返回值

    • grep -A3 string #显示string与string后面(After)3行,可作为string辅助过滤,

    • grep -C3 #string前后的3行

    • grep -e ‘root’ -e ‘sbin’ file #实现多个选项的逻辑或关系,类似正则中’root|sbin’

    • grep -w string #完全匹配string,匹配单词,以标点符号或者空格Tab分隔,类似正则中\bstring\b或\<string\>,具有同等效果,但这是不同的概念,必须加以区分

    • grep -E = egrep #使用扩展的正则表达式

  10. 标准的正则表达式 

    • 由一类特殊字符及文本字符编写的模式,这些字符有控制或匹配的功能

    • man 7 regex #看正则表达式

    • 程序支持grepvimlessnginx

    • 匹配次数

    • grep r.t #匹配任意单个字符

    • grep r[a-z]t #匹配任一指定范围内的任一个字符,如[aBc]表示匹配a或B或c

    • grep r[^[1-7]]t #不在指定范围内的任一个字符

    • [:alpha:]、[:digital:]、[:alnum:]、[:punct:]、[:space:]、[:lower:]、[:upper:]

    • \* # *号前的字符重复任意次数,尽可能长匹配

    • .* # 任意长度的字符\? #前面的字符0次或1次,有和没有都会匹配

    • \+ #前面的字符至少1次

    • \{n\} #n次

    • \{m,n\} #至少m次,至多n次

    • \{,n\} #至多n次

    • \{m,\} #至少m次

    • 位置锚定

    • ^ #句子的行首锚定

    • $ #句子的行尾锚定

    • ^\$ 空行锚定,用cat-A看到的号表示换行,^I表示Tab

    • grep -v “^ *\$” #不显示以空格开头的空行

    • grep -v “^[[:space:]]*$” #不显示以空格和Tab开头的空行

    • grep '\bstr’ 或 ‘\<str’ #str开头单词的词首锚定

    • grep ‘st\b’ 或 ‘\>str’ #str结尾单词的词尾锚定

    • \<string\> #匹配整个单词

    • 分组

    • \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:(root)+分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1, \2, \3, …

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

    • 实例`:(string1+(string2)*)

    • \1: string1+(string2)*

    • \2: string2

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

    • 逻辑或

    • (root|bash)’ #匹配root或bash

    • \(ba|c\)sh’ #匹配bash或csh

  11. egrep及扩展的正则表达式,省略了转义符 

    • egrep = grep -E #可使用扩展的正则表达式

    • 字符匹配: . [] [^]

    • 次数匹配: * ? + {n} {m,n}

    • 位置锚定: ^ $ \< \> \b

    • 分组: (``) 后向引用:\1,\2...

    • 逻辑或: (a|b) (a|b)c

    • + 与 * 的区别:* 匹配的是零次或者多次,被重复的内容可能并不会出现;+ 至少出现一次如ca+t会匹配cat和caaat,但不会匹配ct

    • 注意:使用grep -E或者egrep时不要添加上述符号的转义符

练习

8.5练习.jpg

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

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

相关推荐

  • 从Linux小白到大牛——与狼共舞的日子7

    马哥教育网络班21期+第7周课程练习 1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]#&nbsp…

    Linux干货 2016-11-14
  • 马哥教育网络班21期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限; [root@localhost /]# cp -r /etc/skel /home/tuser1 [root@localhost /]# chmod&nb…

    Linux干货 2016-07-22
  • linux bash环境变量简单总结

    一.环境变量简介Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都 是相同的,这个默认环境实际上就是一组环境变量的定义。 环境变量是全局的,设置好的环境变量可以被所有当前用户所运行的程序所使用。 用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。 …

    Linux干货 2015-09-14
  • 马哥教育网络班19期第一周课程练习

    1、描述计算机的组成及其功能。 从大体上计算机是由cpu、内存、主板、I/O设备、存储设备组成 cpu的功能就好像人的大脑,控制身体的。严格意义上是用来解释计算机指令以及处理软件中的数据的。 内存的功能就好像人的大脑记忆区、来存放眼睛看到的世界。严格意义上是用于暂时存放cpu中的运算数据,以及与硬盘等外部存储器交换的数据 主板的功能就好像人的身体,来链接身体…

    Linux干货 2016-06-18
  • 搭建SSH服务器

    Linux 远程登录服务:sshSSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的…

    Linux干货 2017-07-24