Shell脚本正则表达式之——grep、egrep、sed(内含多个Demo)

Grep命令

基本正则表达式实例之查找特定字符:

这里我们就以存放本机所有用户的/etc/passwd文件做实例

Demo1:

[[email protected] ~]# grep -n "root" /etc/passwd      //-n表示显示行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

基本正则表达式实例之查找集合字符:

有重复的字符时,可使用“[ ]”来进行集合匹配,每次只匹配“[ ]”中的一个字符。

Demo2:

[[email protected] ~]# grep -n "[fn]tp" /etc/passwd
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
27:ntp:x:38:38::/etc/ntp:/sbin/nologin

基本正则表达式实例之反向选择:

在“[ ]”中括号中添加“^”表示进行反向选择(有一定的基础的朋友肯定知道“^[ ]”表示定位行首,这里“^”内外位置意思将完全不同。)

Demo3:

[[email protected] ~]# grep -n "^[^root]" /etc/passwd       //匹配除了以root开头的所有选项
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
......
42:named:x:25:25:Named:/var/named:/sbin/nologin

基本正则表达式实例之转义符:

在正则表达式中一个元字符,所以在这里需要用转义字符“\”将具有特殊意义的字符转化成普通字符。

Demo4:

[[email protected] ~]# grep -n ‘\.$‘ test.txt 1:he was short and fat.
2:He was wearing a blue polo shirt with black pants. 3:The home of Football on BBC Sport online.
5:google is the best tools for search keyword.

基本正则表达式实例——查找任一字符&查找重复字符:

在正则表达式中小数点(.)也是一个元字符,代表任意一个字符。

Demo5:

[[email protected] ~]# grep -n "r..t" /etc/passwd        //(.)小数点这里代表任一字符
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

在上述结果中,“root”字符串“r..t”匹配规则。若想要查询 oo、ooo、ooooo 等资料,则需要使用星号(*)元字符。但需要注意的是,“*”代表的是重复零个或多个前面的单字符。“o*”表示拥有零个(即为空字符)或大于等于一个“o”的字符

Demo5:

[[email protected] ~]# grep -n "oo*" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......

基本正则表达式实例之查找连续字符范围:

例如,查找三到五个 o 的连续字符,这个时候就需要使用基础正则表达式中的限定范围的字符“{ }”。因为“{ }”在 Shell 中具有特殊 意义,所以在使用“{ }”字符时,需要利用转义字符“\”,将“{ }”字符转换成普通字符。

Demo6:

[[email protected] ~]# grep -n "0\{2,\}" /etc/passwd       //表示中间包含2以上o的字符串
11:games:x:12:100:games:/usr/games:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash

Egrep命令

此外,grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用 egrep 或 awk 命令。awk 命令在后面的进行讲解,这里我们直接使用 egrep 命令。egrep 命令与 grep 命令的用法基本相似。(grep命令能用的egrep命令同样能够使用)

扩展正则表达式元字符 作用
+ 作用:重复一个或者一个以上的前一个字符
作用:零个或者一个的前一个字符
| 作用:使用或者(or)的方式找出多个字符
() 作用:查找“组”字符串
()+ 作用:辨别多个重复的组

Demo7:

[[email protected] ~]# egrep -n "10+" /etc/passwd             //使用“+”扩展元字符
11:games:x:12:100:games:/usr/games:/sbin/nologin
31:qemu:x:107:107:qemu user:/:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash
[[email protected] ~]# egrep -n "10?" /etc/passwd             //使用“?”扩展元字符
2:bin:x:1:1:bin:/bin:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
[[email protected] ~]# egrep -n ‘root|zhy‘ /etc/passwd        //使用“|”扩展元字符
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
41:zhy:x:1000:1000:zhy:/home/zhy:/bin/bash
[[email protected] ~]# egrep -n ‘(f|n)tp‘ /etc/passwd        //使用“()”扩展元字符,可与“|”一起使用
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
27:ntp:x:38:38::/etc/ntp:/sbin/nologin

Sed命令:

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作

sed 的工作流程主要包括读取、执行和显示三个过程:

1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
2.执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。
3.显示:发送修改后的内容到输出流。再发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

默认情况下,所有的sed命令都是在模式空间中进行,并不会进行保存。

Sed命令格式:

sed [选项] ‘操作‘ 参数
sed [选项] -f scriptfile 参数 // scriptfile 表示脚本文件

常用选项:

-e :表示用指定命令或者脚本来处理输入的文本文件。
-f :表示用指定的脚本文件来处理输入的文本文件。
-h :显示帮助。
-n:表示仅显示处理后的结果。
-i:直接编辑文本文件。

常用的“操作”参数:

a:增加,在当前行下面增加一行指定内容。
c:替换,将选定行替换为指定内容。
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容。
p:打印,其通常与“-n”选项一起使用
s:替换,替换指定字符。
y:字符转换。

基本用法实例:

输出所有,效果等同cat命令:

[[email protected] ~]# sed -n ‘p‘ /etc/passwd                //效果等同cat命令
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......

输出某一特定行,或者某一段行:

[[email protected] ~]# sed -n ‘10p‘ /etc/passwd                   //输出第10行内容
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]# sed -n ‘2,4p‘ /etc/passwd                 //输出2~4行内容
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

输出奇数行:

[[email protected] ~]# sed -n ‘n;p‘ /etc/passwd                //输出奇数行,偶数行为p;n
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
......

同样,除了基本的使用方法,sed命令也可以结合正则表达式进行使用

输出包含特定内容的行(和grep命令一样,可以使用^、$来定位行首、行尾):
[[email protected] ~]# sed -n ‘/root/p‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
输出包含特定单词的行:
[[email protected] ~]# sed -n ‘/\<root\>/p‘ /etc/passwd           //\<  \>代表单词边界
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

替换符合条件的文本:

sed ‘s/the/THE/‘ test.txt //将每行中的第一个the 替换为 THE
sed ‘s/l/L/3‘ test.txt //将每行中的第 3 个l 替换为L
sed ‘s/the/THE/g‘ test.txt //将文件中的所有the 替换为THE
sed ‘s/o//g‘ test.txt //将文件中的所有o 删除(替换为空串)
sed ‘s/^/#/‘ test.txt //在每行行首插入#:号
sed ‘/the/s/^/#/‘ test.txt //在包含the 的每行行首插入#号
sed ‘s/$/EOF/‘ test.txt //在每行行尾插入字符串EOF
sed ‘3,5s/the/THE/g‘ test.txt //将第 3~5 行中的所有the 替换为 THE
sed ‘/the/s/o/O/g‘ test.txt //将包含the 的所有行中的o 都替换为 O

将文本进行迁移:

sed ‘/the/{H;d};$G‘ test.txt //将包含the 的行迁移至文件末尾,{;}用于多个操作
sed ‘1,5{H;d};17G‘ test.txt //将第 1~5 行内容转移至第 17 行后
sed ‘/the/w out.file‘ test.txt //将包含the 的行另存为文件out.file
sed ‘/the/r /etc/hostname‘ test.txt //将文件/etc/hostname 的内容添加到包含the 的每行以后
sed ‘3aNew‘ test.txt //在第 3 行后插入一个新行,内容为 New
sed ‘/the/aNew‘ test.txt //在包含the 的每行后插入一个新行,内容为 New
sed ‘3aNew1\nNew2‘ test.txt //在第 3 行后插入多行内容,中间的\n 表示换行

原文地址:https://blog.51cto.com/14464303/2441780

时间: 2024-08-29 14:29:33

Shell脚本正则表达式之——grep、egrep、sed(内含多个Demo)的相关文章

第五期 shell 正则表达式(grep egrep sed awk)(第十一 十二讲)

一.grep/egrep 1. 语法+选项语法: grep  [-cinvABC]  'word'  filename (尽量用单引号) ---color 打印出来用红色显示 alias cgrep='grep --color' vim ./bashrc -c :打印符合要求的行数-n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 –B2 则表示打印符合要

shell脚本基础和grep使用

shell脚本基础和grep使用 一.shell脚本基础 (1).命令hash hash的作用:缓存此前命令的查找结果:key-value数据格式(键值),key:搜索键:value:值 hash的使用: 直接使用hash,列出缓存的所有命令 -d选项,hash -d COMMAND:表示清空指定命令的缓存,如hash -d ls -r选项,表示清空所有命令的缓存,hash -r (2).编程语言 强类型变量编程语言 弱类型变量编程语言:? ? (1)bash把所有变量统统视作字符型;? ? 在

正则表达式与grep、sed工具使用简介

正则表达式与grep.sed工具使用简介 一.正则表达式     正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 其介绍如下:      \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的子表达式任意次 + 匹配前面的子表达式一次或多次(大于等于1次) ? 匹配前

【实例】正则表达式利用grep和sed处理日志内容,获取所需的内容

[实例]正则表达式利用grep和sed处理日志内容, 获取所需的内容 app.log文件内容: 2014-09-11 00:00:01,516 INFO [com.tt.bb.thread.Control] - Socket连接:/182.105.83.33:532172014-09-12 10:00:06,555 INFO [com.tt.bb.thread.Control] - Socket连接:/182.113.83.51:53249 2014-09-13 20:00:11,587 INF

shell脚本正则表达式三剑客之一(grep,egrep)

Shell脚本之正则表达式 一.正则表达式三剑客之一:grep 1.学习正则表达式前我们拿一个无用的配置文件作为测试练习 [[email protected] ~]# vim chen.txt #version=DEVEL System authorization information auth --enableshadow --passalgo=sha512# Use CDROM installation media cdrom thethethe THE THEASDHAS Use gra

Shell正则表达式之grep、sed、awk实操笔记

最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅. 首先先复制一段范例: 复制代码 代码如下: # vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food.

Shell编程之正则表达式三剑客——grep,egrep

正则表达式概述 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 基础正则表达式 正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式.基础正则表达式是常用的正则表达式的最基础的部分.在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式.

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

Shell脚本——正则表达式(一)

正则表达式的概念 正则表达式:使用单个字符串来描述.匹配一系列符合某个句法规则的字符串由普通字符与特殊字符组成,一般用在脚本编程.文本编辑器中,如php.python.she等,简写为regex.regexp. 用来检索.替换符合模式的文本,具有强大的文本匹配功能能够在文本海洋中快速高效地处理本文 基础正则表达式 正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式.基础正则表达式是常用的正则表达式的最基础的部分.在 Linux 系统中常见的文件处理工具中 gre