Shell中正则表达式与sed编辑器

本文详细介绍了正则表达式的概念、分类、元字符及其作用,以及sed编辑器的基本原理、工作流程和常用命令格式。涵盖了基础和扩展正则表达式,以及sed如何通过命令处理文本数据流。

目录

一、正则表达式

1.1.正则表达式介绍

1.2.正则表达式分类

1.3.元字符

1.4.扩展正则表达式元字符

二、sed编辑器

2.1.sed编辑器是什么

2.2.sed编辑器的工作流程

2.3.sed命令格式


一、正则表达式

1.1.正则表达式介绍

1、正则表达式---通常用于判断语句中,用来检查某一字符串是否满足某一格式

2、正则表达式是由普通字符与元字符组成

3、普通字符包括大小写字母、数字、标点符号及一些其他符号

4、元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

1.2.正则表达式分类

基础正则表达式

扩展正则表达式

唯一区别:基础正则表达式有 \ 转义,扩展正则表达式没有

gerp sed 默认使用基础正则表达式

grep -E ,sed -r,egrep,awk 使用扩展正则表达式

1.3.元字符

字符作用
\

转义字符,可以把一些特殊的符号转换成普通的符号字符,还可以把一些普通字符转换成特殊功能,例:\!、\n、\$等

^

表示匹配字符串开始的位置,匹配行首,例: ^a、 ^#
$表示匹配字符串末尾的位置,匹配行尾,例: word$、 #$ ;^$表示空行

.

匹配除\n之外的任意的一个字符,例: go.d、g..d
*匹配前面子表达式0次或者多次,例: goo*d、go.*d
.*表示任意长度的任一字符
[my]

表示匹配[ ]中包含的任一字符

[^my]表示匹配除[ ]中包含的任一字符

\{n\}

匹配前面的子表达式n次,例:mo\{2\}y、'[0-9]\{ 2\ }'匹配两位及两位以上数字
\{n,\}匹配前面的子表达式不少于n次,例: mo\{2,\}y、'[0-9]\{2,\}'匹配两位及两位以上数字
\{n,m\}匹配前面的子表达式n到m次(m>=n),例: mo\{2,3\}y、'[0-9]\{2,3\}'匹配两位到三位数字
注: egrep(grep-E)、awk使用{n }、{n, }、{n,m}匹配时"{}”前不用加"\"
\w匹配包括下划线的任何单词字符
\W匹配任何非单词字符。等价于"[^A-Za-z0-9_]"。
\d匹配一个数字字符
\D匹配一个非数字字符。等价于[^0-9]。
\s空白符
\S非空白符

1.4.扩展正则表达式元字符

字符作用
+表示匹配前面的子表达式1次以上
?表示匹配前面的子表达式0或者1次

( )

将括号里的内容看成一个整体
|以或的方式匹配字符串

二、sed编辑器

2.1.sed编辑器是什么

是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个

命令文本文件中。

2.2.sed编辑器的工作流程

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

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

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,
除非是用重定向存储输出或者sed -i.
 

2.3.sed命令格式

sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

选项作用
-e或--expression=表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f或--file=表示用指定的脚本文件来处理输入的文本文件
-h或--help显示帮助
-n、--quiet或silent禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i直接修改目标文本文件 (建议先验证命令或备份目标文件)
-rsed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

 

常用操作

操作作用
s替换,替换指定字符
d删除,删除选定的行
a增加,在当前行下面增加一行指定内容
i插入,在选定行上面插入一行指定内容
c替换,将选定行替换为指定内容
y字符转换,转换前后的字符长度必须相同
p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用。
=打印行号
l(小写L)打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

 

 

 

 

 

<think>好的,我现在需要帮助用户了解如何在shell中使用正则表达式命令,特别是grep查找空行的详细用法。用户之前已经询问过如何用grep查找空行,现在他们想更深入地了解shell中的正则表达式命令,尤其是grep的相关用法,并需要示例。 首先,我要回顾用户的历史对话。用户之前的问题是关于使用grep查找空行,我的回答已经涵盖了基础命令、扩展功能如显示行号、统计数量、递归查找以及处理包含空白字符的行。用户现在可能希望更系统地了解正则表达式shell中的应用,尤其是grep的不同模式(基础扩展)以及其他相关命令如egrep和awk的区别。 接下来,我需要参考用户提供的引用内容。引用[1]提到grep默认使用基础正则表达式,而egrep或grep -E使用扩展正则表达式。同时,引用中给出了如何用扩展正则简化过滤注释和空行的例子。引用[2]区分了不同工具的正则支持类型,比如grep默认BRE,而awk使用ERE。引用[3]列出了grep的一些常用选项,如-E、-v、-n等,这对用户理解参数很有帮助。 用户当前的需求是“shell正则表达式命令详解”,重点在grep查找空行的示例。因此,我需要组织内容,涵盖以下几点: 1. **正则表达式shell中的支持情况**:说明shell本身不支持正则,但某些命令如grep、sed、awk支持,并区分BRE和ERE。 2. **grep命令的基础扩展正则用法**:强调使用grep时默认是BRE,需要-E或egrep来使用ERE,特别是在处理空行时,不同情况下的命令写法。 3. **详细示例**:包括查找严格空行、含空白字符的空行、排除空行、组合过滤(如同时排除注释和空行)等。 4. **相关参数解释**:如-n显示行号,-c统计数量,-v取反,-r递归查找等。 5. **其他命令的对比**:比如egrep和awk如何使用扩展正则,可能给出简单例子。 需要注意用户之前的问题中已经提到过部分内容,如查找含空格/TAB的空行,因此需要避免重复,但可以更详细地展开。同时,用户可能对如何组合使用多个条件感兴趣,比如同时排除注释和空行,这在引用[1]中有例子,可以引用并解释。 另外,用户可能混淆通配符和正则表达式,引用[2]提到shell支持的是通配符,而正则由特定命令支持,这点需要明确说明,避免混淆。 最后,确保回答结构清晰,分点列出,并给出具体的示例命令和解释,帮助用户逐步理解。需要引用之前的引用内容,比如在讲解扩展正则时提到使用egrep或grep -E,并引用[1]和[3]中的参数说明。</think>### Shell正则表达式命令详解:以`grep`查找空行为例 #### 一、正则表达式Shell中的支持 Shell本身**不支持正则表达式**(仅支持通配符),但常用命令如`grep`、`sed`、`awk`等支持正则匹配,分为两种类型: - **基础正则表达式 (BRE)**:默认模式,需转义部分符号(如`+`、`?`、`|`) - **扩展正则表达式 (ERE)**:支持更简洁的语法,需通过`grep -E`或`egrep`启用[^2][^3] --- #### 二、`grep`命令核心用法 ##### 1. 查找严格空行(无任何字符) ```bash grep '^$' filename # 使用BRE模式 ``` - `^`表示行首,`$`表示行尾,`^$`即匹配无内容的行 ##### 2. 查找含空白字符的空行(空格/TAB) ```bash grep -E '^[[:space:]]*$' filename # 需启用ERE模式 ``` - `[[:space:]]`匹配任意空白字符,`*`表示0次或多次重复[^1] ##### 3. 反向过滤(排除空行) ```bash grep -v '^$' filename # -v参数取反匹配[^3] ``` ##### 4. 组合过滤(空行+注释行) ```bash egrep -v '^$|^#' filename # 扩展正则用|表示逻辑"或"[^1] ``` --- #### 三、关键参数解析 | 参数 | 作用 | 示例 | |------|------|------| | `-n` | 显示行号 | `grep -n '^$' file` | | `-c` | 统计匹配行数 | `grep -c '^$' file` | | `-r` | 递归目录搜索 | `grep -rn '^$' /path` | | `-i` | 忽略大小写 | `grep -i 'error' file`[^3] | --- #### 四、不同工具的正则支持对比 | 命令 | 默认正则类型 | 启用扩展正则方法 | |--------------|--------------|-----------------------| | `grep` | BRE | `grep -E` 或 `egrep` | | `sed` | BRE | 需转义符号(如`\+`) | | `awk` | ERE | 直接支持 | --- #### 五、综合示例 1. **统计`nginx.conf`中非空行数量**: ```bash grep -v -c '^$' nginx.conf ``` 2. **递归查找`/etc`目录下含空白字符的空行**: ```bash grep -Ern '^[[:space:]]*$' /etc ``` --- ### 相关问题 1. 如何用`awk`命令实现空行过滤? > 示例:`awk '!/^$/' filename`(`!`表示取反匹配)[^2] 2. `grep`和`egrep`的主要区别是什么? > `egrep`默认支持扩展正则,等同于`grep -E`[^1][^2] 3. Shell通配符正则表达式有何本质差异? > 通配符用于文件名匹配(如`*.txt`),正则用于文本内容匹配[^2] [^1]: shell正则表达式及grep命令 [^2]: shell正则表达式及三剑客grep命令 [^3]: Shell命令find和grep详解及正则表达式和通配符的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值