#7 shell脚本编程之正则表达式

多命令执行方法:

脚本组成;

1.shengbang

2.#

3.空白行——没有任何内容的行、只包含空白字符或制表符(TAB)

4.逻辑判断

shell脚本编程:

1.加执行权限,通过路径来调用脚本;

2.利用解释器直接执行;

本文处理工具:

vim、vi、nano

文本处理三剑客:

grep系:

grep、egrep、fgrep,文本搜索工具,基础“pattern”对于给定的文本进行模糊搜索,grep系默认工作于贪婪模式下;

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

awk:gawk,——gun awk,文本格式化工具,文本报告生成器,文本处理的编程语言;

cut、sort

grep系:

grep

egrep

fgrep

grep:global search regular expression and print out the line。

利用正则表达式进行全局搜索并将匹配的行显示出来;

grep [OPTIONS] PATTERN [FILE...]

PATTERN:过滤条件,是由正则表达式元字符以及没有特殊含义的文本字符组成;

正则表达式的元字符:

会被正则表达式引擎解释为特殊含义;

pcre(最完整的正则表达式引擎)——perl语言的正则表达式引擎;

基本的正则表达式:bre

扩展的正则表达式:ere

grep:默认仅支持基本正则表达式;

egrep:默认仅支持扩展正则表达式;

fgrep:默认不开启正则表达式引擎;

文本字符:

只具备字符便面含义的那些字符;

常用选项:

-i, --ignore-case:忽略文本字符的大小写;

-v, --invert-match:反相匹配;最终显示的结果是pattern不能成功匹配的行;

-c, --count:计数,统计匹配pattern的所有的行数;

-o, --only-matching:关闭贪婪模式,仅显示pattern能够匹配的内容;

-q, --quiet, --silent:安静模式,不输出任何匹配结果;

--color[=WHEN], --colour[=WHEN]:将匹配pattern的内容以特殊颜色高亮显示;

--color=auto

-E, --extended-regexp:扩展的正则表达式,grep -E相当于egrep

-F, --fixed-strings, --fixed-regexp:grep -F 相当于fgrep

-G, --basic-regexp:基本的正则表达式,egrep -G 相当于grep

-P, --perl-regexp:使用pcre(perl common regular expression)引擎;

-A NUM, --after-context=NUM:在显示匹配pattern的行的同时显示其后面的num行;

-B NUM, --before-context=NUM:在显示匹配pattern的行的同时显示其前面的num行;

-C NUM, -NUM, --context=NUM:在显示匹配pattern的行的同时显示其前后各num行;

pattern:

正则表达式元字符:

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

globbing--------简化版的正则表达式:[] ? *

字符匹配:

. :匹配任意单个字符;

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

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

下列所有的字符集都可以放置于[]之中用于匹配单个字符;

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

[[:lower:]]:通配任意单个小写字母;

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

[[:upper:]]:通配任意单个大写字母;

[:alpha:]:表示所有字母字符;

[:digit:]:表示所有的十进制数字;    10

[:alnum:]:表示所有的大小写字母以及十进制数字;

[:space:]:表示空白字符;

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

[:blank:]:表示空白字符;

[:xdigit:]:所有的十六进制数字;

a-z:所有的小写字母;

A-Z:所有的大写字母;

0-9:所有的十进制数字;

次数匹配:该类字符之前的那个字符可以出现的字数;

*:其前面的字符可以出现任意次(0次,1次或多次);

\?:其前面的字符可有可无(0次或1次);

\+:其前面的字符至少出现一次(1次或多次);

\{m\}:其前面的字符必须出现m次;

\{m,n\}:其前面的字符至少出现m次,至多出现n次;(m<n)

\{,n\}:其前面的字符至少出现0次,至多出现n次;

\{m,\}:其前面的字符至少出现m次,多多益善;

在正则表达式中,表示任意长度任意字符的方式:.*

位置锚定字符:

行锚定:

行首锚定:^

行尾锚定:$

字锚定:

字首锚定:\<或\b

字尾锚定:\>或\b

\b:旧版本中的锚定方法,建议不使用;

对于正则表达式引擎来说,字是由非特殊字符组成的练习字符串;

分组与引用字符:

\(pattern\):将此pattern所匹配到的所有字符当作一个不可分割的整体来处理;

在正则表达式引擎值周,有一系列的内置变量,这些变量会保存所有分组内的字符信息,用于后向引用;这些变量依次是:\1,\2,\3,...

pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

\1:pattern2

\2:pattern4

\3:pattern5

\1:第一组小括号中的pattern匹配到的字符;

\2:第二组小括号中的pattern匹配到的字符;

...

请找出在/etc/passwd中用户的UID和GID相同的用户账户;

grep ‘\(\<[[:digit:]]\+\>\).*\1‘ /etc/passwd:设置和查看用户的密码信息;

或:

\|

注意:\|将其左右两边的字符串当作整体对待;

A\|american:A或american

请找出ifconfig命令的执行结果中数值在100-255之间的整数;

第一位: 1    2

第二位:0-9  0-4  5

第三位:0-9  0-9  0-5

ifconfig | grep ‘\<1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\>‘

请找出ifconfig命令执行结果中数值在0-255之间的整数

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

默认情况下,grep命令后面只允许有一个pattern;

如果想要在一次grep搜索过程中写多个pattern,则需要使用-e选项:每一个-e选择只能使用一个pattern作为参数;

将所需要的pattern写入到一个个文件中,保证每行只有一个pattern:我们就可以使用-f file方式来实现多pattern匹配;

egrep:

egrep [OPTIONS] PATTERN [FILE...]

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

字符匹配:

.

[]

[^]

次数匹配:

*

?

+

{m}

{m,n}

{m,}

{0,n}

位置铆钉:

^

$

\<,\b

\>,\b

分组和引用:

()

\1,\2,\3,...

或:

|

fgrep:pattern中所有的字符都被当作文本字符来处理;

其他的文本处理命令;

wc:统计一个文件中的行数、字数及字节数;

wc [OPTION]... [FILE]...

wc [OPTION]... --files0-from=F

-c:只显示字节数;

-l:只显示行数;

-w:只显示字数;

cut:remove sections from each line of files

能够被cut命令修剪的文件,一般都是具有一定结构或格式的文本文档;/etc/passwd

cut OPTION... [FILE]...

-d, --delimiter=DELIM:指定在实施修剪操作时所依赖的分隔符,默认是空白字符;

-f, --fields=LIST:根据定义的分隔符来指定字段的编号;

地址定界使用方法:

#:选择被指定的单个字段;

#,#:离散的多个被指定的单个字段;

#-#:连续的多个被指定的字段;

--output-delimiter=STRING:指定输出符号;

awk:pattern scanning and processing language

awk -F "delimiter"‘[/pattern/]{print $1,$2,...$NF}‘ file...

-F "delimiter":指定字段分隔符,默认为空白字符;

$1,$2,...$NF:根据字段分隔符切割出来的文本片段都存放在相应的内部变量中;

sort:sort lines of text files,将文本文件按行继续排序,默认排序规则是按照ASCII表中的字符顺序进行,

这个排序标准可以修改;

sort [OPTION]... [FILE]...

sort [OPTION]... --files0-from=F

-r, --reverse:逆序排序

-R, --random-sort:随机排序,这种随机算法是非常简陋的,不适用于复杂环境;

-u, --unique:重复出现的行,只保留一行;(连续且完全相同的行叫重复)祛重;

-n, --numeric-sort:以数字的数值大小进行排序;

-t, --field-separator=SEP:指定字段分隔符;

-k, --key=KEYDEF:指明根据哪个关键字段进行排序,一般和-t同时使用;

uniq:report or omit repeated lines

uniq [OPTION]... [INPUT [OUTPUT]]

-d, --repeated:只显示重复出现的行,而且每一组重复行只显示一行;

-u, --unique:只显示不重复的行;

-c, --count:在每行以前缀的方式显示重复行的重复次数;

diff:compare files line by line

diff [OPTION]... FILES

同一文件的不同修改版本:打补丁;

patch:apply changes to files

patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]

[-o outfile][-p num][-r rejectfile][file]

时间: 2024-11-13 14:28:13

#7 shell脚本编程之正则表达式的相关文章

shell脚本编程之正则表达式(二)(扩展正则表达式、sed)

shell脚本编程之正则表达式(二) 一.前言 ? 本文主要是对扩展正则表达式的介绍,同时,继续按照上篇文章的风格介绍sed文本处理工具,sed作为shell编程中"三剑客"之一,在对文本处理上有巨大作用.关于正则概念以及grep命令结合正则使用的案例请参照:https://blog.51cto.com/14557673/2455588 二.扩展正则表达式 ? 扩展正则表达式主要是为了简化指令而产出的.例如,使用基础正则表达式查询文件中空白行与行首为#号之外的行(一般用于查看生效的配置

shell脚本编程之冒泡排序脚本实现(解释非常详细,涉及正则表达式)

shell脚本编程之冒泡排序脚本实现 ? 冒泡排序作为编程中最为基础的算法,对于计算机编程初学者而言是非常值得多研究和多多尝试编写的.对于编程而言,优劣的不是语言,而是实现功能的逻辑思维和突如其来的灵感. ? 下面将给出使用shell实现冒泡排序的脚本,其中涉及的正则表达式需要细细理解.具体解释在下面的注释中有备注. #!/bin/bash #学习shell脚本过程中实现循环输入数生成数组,然后使用冒泡排序法进行从小到大排序 #Author:lokott #Version: 3.1 #冒泡排序法

文本处理工具和正则表达式、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

文本处理工具和正则表达式、SHELL脚本编程

一.文本编辑工具VIM ●命令模式 --> 插入模式 i     insert, 在光标所在处输入 I     在当前光标所在行的行首输入 a    append, 在光标所在处后面输入 A    在当前光标所在行的行尾输入 o    在当前光标所在行的下方打开一个新行 O   在当前光标所在行的上方打开一个新行 ●插入模式 --- ESC-----> 命令模式 ●命令模式 ----:----> 扩展命令模式 ●扩展命令模式 ---ESC,enter---->命令模式 1.进入编辑

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

8.11_Linux之bash shell脚本编程入门篇(一)

什么是bash shell脚本编程? 答:Linux里面有多种shell,而CentOS和redhat的默认shell是bash shell.至于shell脚本,这个跟windows操作系统里面的批处理文件有点像(.bat的文件).不知道大家还是否记得Linux的哲学思想吗?其中有那么两点点:由众多目的的单一应用程序组成:一个程序只做一件事,且做好:组合目的的单一的小程序完成复杂的任务.我觉得shell脚本编程就很好的体现了这个哲学思想.shell脚本利用shell的功能缩写的一个"程序&quo

Shell脚本编程概述(一):算数运算和条件测试

一.shell脚本语言 1.编程语言的分类: (1)根据运行方式 编译运行:源代码 --> 编译器 (编译)--> 程序文件: 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行: (2)根据其编程过程中功能的实现是调用库还是调用外部的程序文件: shell脚本编程:利用系统上的命令及编程组件进行编程: 完整编程:利用库或编程组件进行编程: (3)编程模型: 过程式编程语言:以指令为中心来组织代码,数据是服务于代码: 顺序执行.选择执行.循环执行:代表:C,bash 面向对

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she