关于 文本处理工具、正则表达式、grep 的简单举例

文本处理工具

抽取文本的工具

文件内容:less和cat

文件截取:head和tail

按列抽取:cut

按关键字抽取:grep

文件查看命令:cat,tac,rev

cat [选项] [file]

cat -n     对显示出的每一行进行编号

cat -b     非空行编号

cat -ns    连续压缩空行成一行

cat -v     显示回车符

cat -E     显示行结束符$

cat -A     显示所有控制符

tac file   反向显示内容

rev file   反向显示每一行

hexdump -C file  二进制字符显示内容

分页查看文件内容

more [选项] [file]

more -d 显示翻页及退出提示

less 一页一页的查看文件

/字符   搜索关键字符

n/N     跳到下一个或者上一个

less 命令是man 命令使用的分页器

显示文本的前行或者后行内容

head [选项] [file]

head -c 数字  指定获取文件前部分自定义数字的字节

head -n 数字  指定获取文件前部分自定义数字的行

head -数字   指定获取文件前部分自定义数字的行数

tail [选项] [file]

tail -c 数字  指定获取文件后部分自定义数字的字节

tail -n 数字  指定获取文件后部分自定义数字的行

tail -数字    指定获取行数后部分自定义数字的行数

tail -f /dir/dir

查看日志的状态

tail -n 0 -f /var/log/messages &

后台运行,监测日志的最新内容,直接显示终端上面,不影响正常工作

按列抽取文本cut和文件paste

cut [选项] [file]

cut -d: -f 1,2,3

-d指明分隔符比如以:为分隔符  默认tab

-f后面跟数字。显示某个数字的字段

多个字段,例如#,#[,#] 例如1,3,6

连续的多个字段,例如#-# 例如1-6

也可以混合使用,例如1-5,7

cut -c数字范围按字符切割;例如 cut -c55-56 file

–output-delimiter=指定输出分隔符  显示自定义分隔字符)

例如 cut -d: -f1-5 –output-delimiter=+ f1

练习

1找出ifconfig 命令结果中本机的ip地址

~]# ifconfig | head -2 | tail -1 | cut -d: -f2 |cut -d" " -f1

(命令)(管道接口|只显示前2行的内容,管道接口|显示后1行的内容,

管道接口|抽取以:为分隔符-f2字段的内容单独显示;

管道接口|抽取以“空格字符”为分隔符-f1字段的内容单独显示)

2查出分区空间使用率的百分比值

~]# df |tail -5|tr ‘ ‘ ‘:‘|tr -s ‘:‘|cut -d: -f5

(命令)(管道接口|只显示文件的后5行内容;管道接口|用tr命令将文件内容中的‘空格‘替换成‘:‘

管道接口|用tr -s将连续重复的字符统一压缩成一个字符;管道接口|抽取文件中以:为分隔符-f5第五个字段的内容显示)

paste 合并两个文件同行号的列到一行

paste [选项] [file]

paste -d  指定分隔符         例如 ~]# paste -d: f3 f4

paste -s  所有行合成一行显示 例如 ~]# paste -s f3 f4

paste file file 格式         例如 ~]# paste f3 f4

分析文本的工具

文本数据统计:wc

整理文本:sort

比较文件: diff 和 patch

收集文本统计数据wc

计数单词总数、总行数、字节的总数和字符的总数

]# wc f1

18  79 883 f1

行数;单词数;字符数; 文件

wc -l   只计数行数

wc -w   计数单词总数

wc -c   计数字节总数

wc -m   计数字符总数

文本排序sort

把整理过的文本显示出来,不改变原始文件

sort [选项] file

常用选项

sort -r  执行反方向(由上至下)的整理显示

sort -n  执行按数字大小整理显示

sort -f  选项忽略(fold)字符串中的字符大小写

sort -u  删除多余重复的字符

sort -t  使用某个字符做为字段界定符;比如使用-t:以:作为字段界定符

sort -k  选项按照使用c字符分隔的X列来中立能够使用多次

uniq 从输入中删除重复的前后相接的行

uniq [选项] [file]

uniq -c 显示每行重复出现的次数

uniq -d 仅显示重复过的行

uniq -u 仅显示不曾重复的行

连续并且完全相同方位重复

通常和sort 命令一起配合使用

sort file | uniq -c

比较两个文件之间的区别

diff [file] [file]

diff f1 f2  > bf.log

比较两个文件的区别并重定向到一个文件中

复制对文件改变patch

diff 命令的输出被保存在一种叫做“补丁”的文件中

使用 -u 选项来显示出来更详细的变动内容

patch 命令复制在其他文件中进行的改变

使用 -b 选项来自动备份改变了的文件

diff f1 f2 -u > bf.log

patch -b f1 bf.log

先备份f1原有的文件内容,加-b选项后 会生成一个f1.orig的文件格式,这个是原先的f1

然后这个时候bf.log会变成f1文件,也就是恢复了原先的f2文件

练习

1查出用户UID最大值的用户名, UID级shell类型

~]# getent passwd |sort -t: -k3 -n |cut -d: -f1,3,7 |tail -1

(命令) (管道接口|-t选项以:为界定符的-k 第3列 -n按照数字大小整理排序)(抽出文本-d:为分隔符的-f 1,3,7字段的内容)(按照倒序1行显示)

2查出/tmp的权限,以数字方式显示

~]# stat /tmp | head -4 |tail -1 |tr " " "\n" |head -2 |tail -1 |tr -dc ‘[:digit:]‘

~]# stat /tmp |head -4  |tail -1 |cut -d: -f2 |tr -dc ‘[:digit:]‘

(命令) (正序显示前4行然后倒序显示后1行;抽取文本-d:为分隔符 -f 2字段的内容)(删除在补集引用数字的字符)

文本处理三剑客

grep 文本过滤工具

grep,egrep,fgrep(不支持正则表达式搜索)

sed  文本编辑工具

awk  文本报告生成器

grep

作用:文本搜索功能根据,更具用那个户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

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

grep 自定义字符 路径 路径

可以搜索指定的字符,可以加上两个不同的路径来显示出来搜索结果

grep [选项] [自定义字符] [file]

grep root /etc/passwd

grep "$USER" /etc/passwd

grep ‘$USER‘ /etc/passwd

grep `whoami`/etc/passwd

alias grep=‘grep –color=auto‘ 对匹配到的文本着色显示。6版本需要设置,7版本默认

grep -v 显示不能被自定义字符匹配到的字符串

grep -i 忽略字符大小写

grep -n 统计匹配的行数

grep -c 统计匹配的行数

grep -o 仅显示匹配到的字符串

grep -q 静默模式,不输出任何信息

grep -A ##自定义数字。后几行

grep -B ##自定义数字,前几行

grep -C ##自定义数字,前后各几行

grep -e 实现逻辑或和与,比如取root或者bash的行 grep -e root -e bash /etc/passwd;

例如,包括root并且bash, grep root /etc/passwd | grep bash

grep -w 整行匹配整个单词

grep ‘自定义字符’ 默认搜索关键字

正则表达式

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

程序支持:grep,vim,less,nginx等

正则表达式分为两类

基本正则表达式:BRE

扩展正则表达式: ERE   grep -E = egrep

正则表达式引擎:采用不同的算法,检查处理正则表达式的软件模块

元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符

字符匹配:

.      匹配任意单个字符

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

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

[:alnum:] 表示所有的字母和数字

[:alpha:] 表示左右的字母不区分大小写

[:digit:] 表示所有的数字

[:lower:] 表示所有的小写字母

[:punct:] 表示所有的标点符号

[:space:] 表示所有的空白字符

[:upper:] 表示所有的大写字母

次数匹配:用于要指定次数的字符后面,用于指定前面的字符要出现的次数

*:匹配前面的字符任意次,包括0次;贪婪模式:尽可能的匹配能匹配多少。

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

\?: 匹配其前面的字符0或1次

\+: 匹配其前面的字符至少1次

\{n\} 匹配前面的字符n次

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

\{,n\}  匹配前面的字符至多n次

\{n,\}  匹配前面的字符至少n次

位置锚定:对特定位置进行定位显示

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

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

^自定义字符$ :用于匹配到整行

^$ :空行

^[[:space:]]*$ :空白行

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

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

\<自定义字符\>  :匹配整个单词

分组:分组是至将一个或多个字符捆绑在一起,当作一个整体进行处理,其符号为\(\):

如:\(root\)\+

rootrootroot

将三个root分组\(root\) \+表示重复一次以上

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…

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

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

例如 \(ab\+\(xy\)*\)中\1表示 ab\+\(xy\)* \2表示 xy

后向引用:引用钱面的分组括号中的模式所匹配的字符,而非模式本身

egrep及扩展的

正则表达式

egrep = grep -E

egrep [选项] [自定义字符] [file]

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

字符匹配:

.   任意单个字符

[]  指定范围的字符

[^] 不在指定范围的字符

次数匹配:

*    匹配前面字符任意次

?   0或1次

+    1次或多次

{m}  匹配m次

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

位置锚定

^   行首

$   行尾

\<,\b  语首

\>,\b  语尾

分组

()

后向引用

\1,\2,…

或者:

a|b

C|cat C或cat

(C|c)at Cat 或cat

扩展正则表达式的使用语法

grep -E ‘自定义字符‘ file

egrep ‘自定义字符‘ file

练习

1显示三个用户root,xiaomage,makangbo的UID和默认shell类型

egrep "^(root|xiaomage|makangbo):" /etc/passwd | cut -d: -f3,7

(扩展正则表达式用“”引用表达式元字符^取开头为某字符的字段;后面跟文件路径)

(管道接口|-d抽取分隔符为:的字段 -f 定义第3,7个字段为结果)

2 找出/etc/rc.d/init.d/functions 文件中行首为某单词(包括下划线)后面跟一个小括号的行

~]# cat /etc/rc.d/init.d/functions | egrep -o "^[[:alnum:]_]+\(\)"

(查看文件路径内容;管道接口|扩展正则表达式加-o选项仅显示匹配到的字符

“”引用^开头为所有字母和数字,并且带有下划线和分组为括号的字段显为显示结果)

3使用egrep取出/etc/rc.d/init.d/functions中基名

~]# echo "/etc/rc.d/init.d/functions" | egrep -o "[^/]+?$"

(回显命令 文件路径内容 ;管道接口|扩展正则表达式 -o选项仅显示匹配到的字符

“”引用[^/]匹配知指定范围外的任意单个字符,+匹配前面的字符至少一次?任意字符$匹配字符结尾)

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

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

(正则表达式-v选项显示不能被匹配到的行,不匹配以/bin/bash$为结尾的字符,,后面跟文件路径)

5 显示rpc默认的shell程序

~]# grep -w "\<rpc" /etc/passwd |cut -d: -f7

(命令加-w选项,整行匹配整个单词。引用词首锚定\<为rpc 后面跟上文件路径)

(抽取文本-d:为分隔符的 定义-f7的字段内容为显示结果)

6 找出/etc/passwd 中的两位或三位数

~]# grep "[0-9][0-9][0-9]\?" /etc/passwd

(命令 引用[数字范围]\? 匹配前面的字符0次或1次,就是前面的可有可无 后面跟文件路径)

7显示 /etc/grub2.cfg 文件中,至少以一个空白字符开头的,并且后面存在费空白字符的行

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

(命令引用^开头为空白字符的\+匹配最少一次[^[非空白结尾的字符行 后面跟文件路径)

8找出‘netstat -tan’命令结果中以‘LISTEN‘后跟任意多个空白字符结尾的行

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

(命令  管道接口|正则表达式引用LISTEN之后跟空白字符*匹配任意次$行尾锚定)

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

~]# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

(命令引用^行首锚定,分组所有字母数字\{1,\}匹配前面的字符至少一次 .*匹配任意长度的任意字符 \1后向引用 $行尾锚定  后面跟文件路径)

不管什么命令,要学会灵活使用,有的时候搭配在一起会让人有意想不到的结果,比如 rm -rf /   

时间: 2024-08-25 22:35:53

关于 文本处理工具、正则表达式、grep 的简单举例的相关文章

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

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

文本处理工具--正则表达式

在学习linux中文本搜索是很重要的 对于初学者来说如何快速学会运用正则表达式相当重要的. 文本搜索工具,根据用户指定的文本搜索模式(搜索条件)对目标进行逐行搜索,显示能匹配的行. 文本搜索: grep :基本正则表达式 egrep:扩展正则表达式 fgrep:fast,不支持使用正则表达式 其语法格式: grep [option]...'PATTERN' FILE... 正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等能: 元字符:不表示其字面意义,而用于

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

基本正则表达式和文本处理工具之grep、egrep和fgrep

Grep(global search regular expression and print out the line全局搜索正则表达式并把行打印出来),是一种强大的文本搜索工具,egrep和fgrep的命令跟grep只有很少的差别,linux使用的是GNU版本的grep,功能非常强大,可以通过-G,-E,-F命令选项来使用egrep和fgrep的功能,grep的工作方式为在一个或多个文件中搜索字符串模板,如果模板包括空格则必须被引用,模板后的所有字符串被看做文件名,搜索的结果被送到屏幕,不影

文本处理工具之grep和正则表达式

grep :是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. grep命令选项   -m # 匹配#次后停止   -v 显示不被pattern匹配到的行   -i 忽略字符大小写   -n 显示匹配的行号   -c 统计匹配的行数   -o 仅显示匹配到的字符串   -q 静默模式,不输出任何信息   -A # after, 后#行   -B # before, 前#行   -C # context, 前后各#行   -e 实现多个选项间的逻辑or关系 grep –e

文本处理工具及grep

常见的文本处理工具 在日常的linux运维工作当中,我们经常要在一些文本当中抽取过滤出我们所需要的信息,从而达到我们的需求,需要特定的文本处理工具来帮我们完成此类操作 本章节主要讲解的内容有: 文件查看:cat 分页查看文本:less.more 抽取文件特定行数:head.tail 抽取文本特定列:cut 合并文本:paste 文本统计:wc 文本排序并统计:sort.uniq 比较文件:diff.patch cat:连结查看文本和输出至标准输出 -n:为每行添加行号 -A:显示所有控制符 -E

Linux文本处理工具之grep、egrep和fgrep

一.基本概念 正在表达式:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. grep(global search regular expression(RE) and print out the line):文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行(可以看成一个文本过滤器) egrep:使用扩展正则表达

文本处理工具之grep、egrep

-:常见的通配符:* ? [] *:匹配任意长度的任意字符 ?:匹配任意一个字符 []:匹配指定范围内的任意单个字符 [^]:脱字符,表示取反的意思 二:正则表达式:是一种查找以及字符串替换操作.分为基本正则表达式和扩展正则表达式.正则表达式在文本编辑器中广泛使用,比如正则表达式被用于: 检查文本中是否含有指定的特征词 找出文中匹配特征词的位置 从文本中提取信息,比如:字符串的子串 修改文本 基本正则表达式: 元字符:不表示字符本身的意义,用于额外功能性的描述. 基本正则表达式的元字符: 字符匹

Linux文本处理工具之grep

文本处理三剑客之GREP 文本过滤工具:glob 用于实现bash中的文件名通配 通配符: *:任意长度的任意字符 ?:任意单个字符 [ ]:明确指明匹配范围内的单个字符 [abc]:abc中的任意一个 注:要匹配通配符本身,需要使用%转义 常用的字符集合表示法: [:alpha:]:任意字母 [:alnum:]:任意数字和字母 [:blank:]:任意空白字符 [:cntrl:]:任意控制字符 [:digit:]:任意数字 [:lower:]:任意小写字母 [:upper:]:任意大写字母 [