shell编程(七)文本处理工具

文本处理工具:

Linux上文本处理三剑客:

grep, egrep, fgrep:文本过滤工具(模式:pattern)工具;

grep:基本正则表达式,-E,-F

egrep:扩展正则表达式, -G,-F

fgrep:不支持正则表达式,

sed:stream editor, 流编辑器;文本编辑工具;

awk:Linux上的实现为gawk,文本报告生成器(格式化文本);

正则表达式:Regual Expression, REGEXP

由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

元字符:\(hello[[:space:]]\+\)\+

grep: Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;

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

正则表达式引擎;

grep  [OPTIONS]  PATTERN  [FILE...]

grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]

OPTIONS:

--color=auto:对匹配到的文本着色后高亮显示;

-i:ignorecase,忽略字符的大小写;

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

-v, --invert-match:显示不能被模式匹配到的行;

-E:支持使用扩展的正则表达式元字符;

-q, --quiet, --silent:静默模式,即不输出任何信息;

-A #:after, 后#行

-B #:before,前#行

-C #:context,前后各#行

基本正则表达式元字符:

字符匹配:

. :匹配任意单个字符;

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

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

[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

*:匹配其前面的字符任意次;0,1,多次;

例如:grep "x\+y"

abxy

aby

xxxxxy

yab

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

\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;

\+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;

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

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

\{0,n\}:至多n次

\{m,\}:至少m次

位置锚定:

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

$:行尾锚定;用于模式的最右侧;

^PATTERN$:用于PATTERN来匹配整行;

^$:空白行;

^[[:space:]]*$:空行或包含空白字符的行;

单词:非特殊字符组成的连续字符(字符串)都称为单词;

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

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

\<PATTERN\>:匹配完整单词;

练习:

1、显示/etc/passwd文件中不以/bin/bash结尾的行;

~]# grep -v "/bin/bash$" /etc/passwd

2、找出/etc/passwd文件中的两位数或三位数;

~]# grep  "\<[0-9]\{2,3\}\>"  /etc/passwd

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;

~]# grep  "^[[:space:]]\+[^[:space:]]"  /etc/grub2.cfg

4、找出"netstat -tan"命令的结果中以‘LISTEN‘后跟0、1或多个空白字符结尾的行;

~]# netstat -tan | grep  "LISTEN[[:space:]]*$"

分组及引用

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

\(xy\)*ab

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

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

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

\3

...

He loves his lover.

He likes his lover.

She likes her liker.

She loves her liker.

~]# grep  "\(l..e\).*\1"  lovers.txt

后向引用:引用前面的分组括号中的模式所匹配到的字符;

egrep:

支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

egrep [OPTIONS] PATTERN [FILE...]

选项:

-i, -o, -v, -q, -A, -B, -C

-G:支持基本正则表达式

扩展正则表达式的元字符:

字符匹配:

.:任意单个字符

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

[^]:指定范围外的任意单个字符

次数匹配:

*:任意次,0,1或多次;

?:0次或1次,其前的字符是可有可无的;

+:其前字符至少1次;

{m}:其前的字符m次;

{m,n}:至少m次,至多n次;

{0,n}

{m,}

位置锚定

^:行首锚定;

$:行尾锚定;

\<, \b:词首锚定;

\>, \b:词尾锚定;

分组及引用:

():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;

后向引用:\1, \2, ...

或:

a|b:a或者b;

C|cat:C或cat

(c|C)at:cat或Cat

练习:

1、找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;

~]# grep -i "^s" /proc/meminfo

~]# grep "^[sS]" /proc/meminfo

~]# grep -E "^(s|S)" /proc/meminfo

2、显示当前系统上root、centos或user1用户的相关信息;

~]# grep -E "^(root|centos|user1)\>" /etc/passwd

3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;

~]# grep  -E  -o  "[_[:alnum:]]+\(\)"  /etc/rc.d/init.d/functions

4、使用echo命令输出一绝对路径,使用egrep取出基名;

~]# echo /etc/sysconfig/ | grep  -E  -o  "[^/]+/?$"

进一步:取出其路径名;类似于对其执行dirname命令的结果;

5、找出ifconfig命令结果中的1-255之间的数值;

~]# ifconfig | grep  -E  -o  "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

6、课外作业:找出ifconfig命令结果中的IP地址;

7、添加用户bash, testbash, basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

~]# grep  -E  "^([^:]+\>).*\1$"  /etc/passwd

fgrep:不支持正则表达式元字符;

当无需要用到元字符去编写模式时,使用fgrep必能更好;

时间: 2024-07-28 12:28:21

shell编程(七)文本处理工具的相关文章

shell编程之文本小工具

一.文本处理工具1.grep工具2.cut工具3.sort工具4.uniq工具5.tee工具6.diff工具7.paste工具二.bash的特性1.命令和文件自动补全2 .常用的通配符3.bash中的引号 一.文本处理工具 1. grep工具 grep是==行==过滤工具:用于根据关键字进行行过滤 语法和选项 语法: # grep [选项] '关键字' 文件名 常见选项: OPTIONS: -i: 不区分大小写 -v: 查找不包含指定内容的行,反向选择 -w: 按单词搜索 -o: 打印匹配关键字

shell之三大文本处理工具grep、sed及awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处

Shell正则表达式和文本处理工具(一)

作业一:整理正则表达式博客 1.什么是正则正则就是用一些具有特殊含义的符号组合而成(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 通配符是由shell解释得.如果shell是爷爷,通配符就是爹.正则表达式则是由命令解释得,命令又被shell解释.如果shell是爷爷,正则表达式就是孙子.通配符和命令是一个级别的. 通配符是为了方便命令操作,正则表达式是为了操作文本内容.字符或字符串. *:左边的那一个字符有0个到无穷个+:左边的那一个字符有1个到无穷个?:

shell编程之文本与日志过滤

1:grep命令: grep -v  "char"  file_name 匹配不包括"char"的文本 grep -n -w "char" file_name 完整匹配某个字符 grep ^s $s  分别为匹配行首为s的 或者行末为s的文本. 2:tr 命令 tr set1  set2   替换集合set1 为set2 tr -s set1  压缩字符 tr -t  ":"     指定分隔符 默觉得空格 tr -d &qu

Shell编程之正则表达式(二)

文本处理器 在 Linux/UNIX 系统中包含很多种文本处理器或文本编辑器,其中包括我们之前学习过的VIM 编辑器与 grep 等.而 grep.sed.awk 更是 shell 编程中经常用到的文本处理工具,被称之为 Shell 编程三剑客. sed 工具 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加.移动等),最后输出所有行或者仅输出处理的某些行.sed 也可以在无交互的情况下实现相复杂的文本处理

shell编程基础之基本文本工具集合

一 shell简介: 1 描述 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell.shell环境shell和Java.php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行脚本

第三周、文本处理工具、shell脚本编程

文本处理工具 1.cut -d指定分隔符.比如-d: -d' ' -f指定取第几列.比如-f1,3 --output-delimiter指定显示的分隔符 tr -s压缩 -d删除 -c除了 2.使用tr和cut取磁盘的百分比 [[email protected] data]# df -h | tr -s ' ' | cut -d' ' -f5 | tr -dc '[0-9]\n' 0 0 5 0 32 67 32 0 3.取IP [[email protected] data]# ifconfi

文本处理工具和正则表达式、shell脚本编程基础-第四周

第四周-文本处理工具和正则表达式.shell脚本编程基础1. 统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户的个数,并将用户都显示出来grep -v '/sbin/nologin' /etc/passwd|wc -lgrep -v '/sbin/nologin' /etc/passwd|cut -d: -f12. 查出用户UID最大值的用户名,UID及shell类型.cut -d: -f1,3,7 /etc/passwd|sort -t: -k2 -nr

6.shell脚本基础和grep文本处理工具企业应用

6.1shell脚本基础-bash变量和逻辑运行 bash特性及bash脚本编程初步 终端:附着在终端接口程序: GUI:KDE,GNome,Xfce CLI:/etc/shells bash的特性 命令行展开:~,{} 命令别名:alias,unalias 命令历史: history 文件名通配:glob 快捷键:Ctrl+a, e, u, k, l 命令补全: $PATH 路径补全: bash特性之:命令hash 缓存此前命令的查找结构:key-vlaue key:搜索值 value:值 h