Linux文本处理---文本搜索

在linux中,因为一切皆文件,而大部分程序的配置文件是文本形式的。所以对文本的处理就显得相当的重要了。对文本的处理包括对文本内容的搜索,文本内容的处理。下面就介绍文本的搜索相关知识。

文本内容搜索

文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上。文本搜索的主要作用是用于统计相关信息。

一、正则表达式

1、正则表达式的概念

是一类字符的书写模式,这些个字符不代表本字符的意义,而是具有特殊意义。一般是对控制或通配的功能。

2、正则表达式的识别

靠正则表达式引擎来负责翻译或者解释其中元字符的含义,正则表达式引擎是一段程序。通常每种语言(包括shell)的正则表达式引擎都不一样,从而导致了每种语言的正则表达式的元字符所代表的意义都不尽相同。

3、正则表达式的元字符

正则表达式元字符:就是代表特殊意义的特殊字符。

1)字符集种类及表示方法

种类 意义
0-9 或 [:digit:] 0-9数字
a-z 或 [:lower:] 小写字母
A-Z 或 [:upper:] 大写字母
[:space:] 空格或TAB空白字符
[:punct:] 特殊字符
[:alpha:] 大小写字母
[:alnum:] 字母和数字的组合

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

元字符种类 具体含义 示例
字符匹配 . 表示匹配任意单个字符 l..k  匹配像:love,like
[] 匹配指定范围内任意单个字符
[0-9] 0-9任意一个数字

[[:upper:]] 匹配大写字母中的任意一个

[^] 匹配指定范围外的任意单个字符
[^a-z] 匹配除a-z以外的任意字符

[^[:alnum:]] 匹配除数字和字母以外的任意字符

次数匹配 * 匹配前面字符任意次,包括0次 ca*  匹配像:c,ca,caa,caaa等
\? 匹配前面字符至多一次,就是说前面的字符可有可无 ha\?  匹配的只有:he,h
\{m\} 精确匹配前面的字符m次 hm\{2}\  匹配的只有:hmm
\{m,\} 匹配前面的字符至少m次 hm\{2,}\  匹配像:hmm,hmmm等
\{m,n\} 匹配前面字符至少m次,至多n次 hm\{2,4\} 匹配:hmm,hmmm,hmmmm
\{0,m\} 匹配前面的字符至多n次 hm\{0,3\} 匹配:hm,hmm,hmmm
位置锚定 ^ 锚定行首,写在最左侧 ^abc  
$ 锚定行尾,写在最右侧 abc$
\<  \b 锚定单词词首,出现与单词最左侧  \<abc \babc
\>   \b 锚定单词词尾,出现单词的最右侧 abc\> abc\b
分组 \(\) 分组中的模式匹配到的内容,可由正则表达式引擎保存在内存中,之后可被引用 \(abc\)
\# 引用定#个括号所配到的内容,而非模式本身。#确定方法自左向右左括号的个数 \1,\2

注意:在这里单词的意思是,不包含特殊字符的连续字符组成的字符串就叫做单词。

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

元字符种类 具体含义 示例
字符匹配 . [] [^] 同基本正则表达式完全一样
次数匹配
* ? {m}{m,}

{m,n} {0,m}

同基本正则表达式一样,但注意一点是:?和{}在使用的时候不用转义了
+ 匹配前面的字符至少1次 hm+ 匹配:hm,hmm,hmmm等
位置锚定 ^ $ \<  \b  \> 同基本正则表达式完全一样
分组 () 同基本正则表达式一样,但注意一点是()在使用的时候不用转义了
或者 |
表示选择关系


c|Cat 匹配的是:c 或者 Cat

|整个左边是一部分,|整个右边是一部分

二、文本内容搜索命令

常用的文本搜索命令有grep,egrep,fgrep

1、grep:Golbal search REgular and Print out the line.

文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上。

Usage: grep [option]... ‘PATTERN‘ FILE...

对于PATTERN的条件的设定或者说书写,可以借助于正则表达式。

常用参数 参数意义 示例
-i 匹配时PATTERN中的条件,忽略器大小写 grep -i ‘Root‘ /etc/passwd
-v 反向匹配,显示没有匹配到的行 grep -v ‘linux‘ /etc/passwd
-o 只显示匹配到的内容 grep -o ‘gentoo‘ /etc/passwd
--color=auto 支持扩展表达式 grep --color=auto ‘root‘ /etc/passwd
-A 显示匹配行的后面指定数目行 grep -A 2 ‘linux‘ /etc/passwd
-B 显示匹配行的前面指定数目行 grep -B 3 ‘linux‘ /etc/passwd
-C 显示匹配行的前后指定相同数目行 grep -C 2 ‘linux‘ /etc/passwd
-n 显示输出行的行号 grep -nC 2 ‘linux‘ /etc/passwd
-E 支持扩展正则表达式 grep -E ‘[0-9]+‘ /etc/passwd

2)egrep相等于grep -E。

3)fgrep:fast grep,这里不支持正则表达式,常用选项和grep一样。

三、综合练习

#1、显示/proc/cpuinfo文件中以大写或小写C开头的行,并显示出对应的行号;
#实现命令:
#grep -n ‘^[Cc]‘ /proc/cpuinfo 
#grep -nE ‘^c|C‘ /proc/cpuinfo 
#grep -i ‘^c‘ /proc/cpuinfo
#演示结果 
[[email protected] ~]# grep -n ‘^[Cc]‘ /proc/cpuinfo | head -n 3
3:cpu family	: 6
7:cpu MHz		: 2394.620
8:cache size	: 3072 KB

#2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的,并且UID最小的用户
[[email protected] ~]# grep ‘/sbin/nologin$‘ /etc/passwd | sort -n -t: -k3 | head -n 1 | cut -d: -f1
bin

3、找出/etc/passwd文件中的一位数或两位数或三位数;
[[email protected] ~]#grep "\<[0-9]\{1,3\}\>" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
#4、找出ifconfig命令结果中的1-255之间的数字
# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

Linux文本处理---文本搜索

时间: 2024-05-23 23:13:22

Linux文本处理---文本搜索的相关文章

如何在Linux上提高文本的搜索效率

对于系统管理员或程序员来说,当需要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时,grep类型的工具大概是最受欢迎的. 如果grep是你最喜欢的工具之一,那么你可能会更喜欢ack.ack是一个基于Perl的类似于grep的命令行工具,但是搜索速度更快,能力比grep更强.尤其是当你是程序员时,我强烈推荐你使用ack来取代grep. ack的用法非常适用与代码搜索,因此程序员可以在源码树中进行复杂的查询,而只需要更少的按键. ack的特性 ack的一些非常强大的特性: 默认搜索当前工作

linux 中的 文本处理工具

文本处理工具 在linux系统中 文本工具有很多 现在具体介绍几款 如 抽取文本的工具 和文件三剑客 文件内容:less和 cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep egrep 首先 有 查看文件的cat tac cat [OPTION]... [FILE]... -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 tac 与cat 命令 一样 不过是取反 more: 分页查看文件 m

Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘 这是很方便的.使用grep搜索出我们想要的数据再使用 sed .或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法. Egreq 是grep 的升级版,支持扩展表达式.fgrep不支持正则表达式. 使用格式: 1 2 3 4 5 grep [OPTIONS] PATTERN [FILE...]      -o     只打印输出匹配到字符串      -i      做匹配时候忽略大小写   

&nbsp; &nbsp; linux 中的文本处理工具,grep,egrep

一:grep与egrep简介:                    grep与egrep是在linux中对linux文本搜索用的比较多的一个工具.它结合正则表达式实现与模型匹配的行. 二:语法格式: grep [option]... 'PATTERN' FILE... 支持基本正则表达式                  egrep [option]... 'PATTERN' FILE...支持扩展正则表达式                  [option]常用的主要有:          

linux操作系统-给文本添加 &#39; -单引号,一般转成CSV格式时使用

[[email protected] ~]# cat 1.txt1ms2ms3ms4ms5ms [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}'1ms'2ms'3ms'4ms'5ms' [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}' > 2.txt[[email protected] ~]# cat 2.txt1ms'2ms'3

Linux之关于文本编辑器

关于文本编辑器 文本编辑器有很多,比如图形模式的gedit.kwrite.OpenOffice ... ... ,文本模式下的编辑器有vi.vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器.我们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它.  nano 工具和DOS操作系统下的edit操作相似,使用简单,我们不作介绍了,如果您有兴趣,不妨尝试一下: vi 编辑器 为什么要学会简单应用vi vi或vim

Linux中关于文本查看和处理的常用命令

            Linux中关于文本查看和处理的常用命令 一.学习目标         掌握以下命令:             查看文本: cat .tac.more.less.head.tail             文本处理:cut.sort.uniq.wc.tr 二.查看文本命令        cat : 连接并显示文本 cat [options] file,... -n :显示行号 -E :显示结束符$ more :分屏查看文件 space键: 向后翻一屏 b键:向前翻一屏 e

第二章 Linux文件系统和文本编辑器

用户分为三类: 1.root用户 2.虚拟用户:不具有登录系统的能力,一般系统自身拥有,比如bin,daemon,ftp,mail 3.普通用户 useradd: -g:指定用户私有组 -G:添加附加组 -d:指定用户家目录,如果不存在可以结合-m创建 -m:如果家目录不存在则自动创建 -u:指定UID,和-o一起可以重复使用其他用户的UID,必须>=100 注意useradd的用户没有密码还不能登录 usermod:修改用户账号 -d[directory]:改变用户登录时的目录,注意不是改变家

Linux文本处理---文本查找

文件查找 所谓的文件查找时根据文件的各种属性在特定的路径下找到对应文件的过程. 一.文件查找的方式 实时查找:遍历所有文件进行条件匹配.查找精确,但是速度慢. 这种查找通过find命令来实现. 非实时查找:根据索引进行查找.查找速度快,但是查找不精确. 这种查找locate命令,它只依赖于索引查找的,索引的创建时在系统空闲的时候由系统自动进行的.手动更新数据库的命令式upadtedb. 二.实时查找 通过find命令来实现.find是根据查找条件,在查找路径中查找到对应的文件,根据处理动作做出相