sed正则表达式

很多linux命令支持正则表达式,sed也不例外。

 
行开始 ( ^ )

插入符^匹配一行的开始。比如说,匹配以103打头的行:

sed -n '/^103/p' data.txt

注意,插入符只有在表达式的首位时,才表示行首匹配。 

行尾( $) 

美元符$匹配行尾。比如说,输出以g结尾的行:

 sed -n '/g$/p' data.txt

单字符 (.)

句点(.)匹配除行字符结尾的任何单个字符。一个点匹配一个字符,两个点匹配两个,三个点匹配三个,以此类推。

比如,把L及随后的一个字符替换为Lee:

sed -n 's/L./Lee/p' data.txt

 

 字符出现零或多次(*)

星号(*)表示它之前的字符出现零或多次。比如说:’1*’表示匹配零个或多个连续的1.

 比如说,有这样一个log文件,其内容如下:

log: Input Validated
log:
log:  testing resumed
log:
log:output created

 假设你只关注有内容的行,那么可以这样做:

sed -n '/log: *./ p' log.txt

注意星号后面有一个句点,这是必要的。否则它会输出所有行。 

字符出现一次或多次(\+) 

元字符“\+”匹配它之前的字符,它出现一或多次。比如,在上面的log文件里,匹配有log:后跟空格的行:

sed -n '/log: \+/ p' log.txt

字符出现零或一次 (\?) 

元字符(\?) 表示匹配它之前的字符,出现零或一次。

sed -n '/log: \?/ p' log.txt

元字符转义 (\) 

如果需要匹配包含元字符的内容(比如说星号、句点),那么,需要对元字符进行转义。

sed -n '/127\.0\.0\.1/ p' /etc/hosts

字符集匹配 ([0-9])

字符集用方括号表示,它用于匹配集合里提及的元素。比如说,匹配包含2、3或4的行:

sed -n '/[234]/ p' data.txt

在方括号里,可以用连接符-来表示范围。比如  [0123456789]等价于 [0-9],它还可用于字符集,比如说[a-z],[A-Z] 。

sed -n '/[2-4]/ p' data.txt

 逻辑或(|) 

管道符(|) 表示逻辑或,“subexpression1|subexpression2”匹配subexpression1或subexpression2。

sed -n '/101\|102/ p' data.txt

 注意管道符是转义的。

准确匹配m次出现({m}) 

 假设有一个numbers.txt文件,其内容如下:

1
12
123
1234
12345
123456
  • 打印包含阿拉伯数字字符的行:
sed -n '/[0-9]/ p' numbers.txt
  •  打印五位数
sed -n '/^[0-9]\{5\}$/ p' numbers.txt

指定出现次数的范围({m,n}) 

  • 打印3到五位数
sed -n '/^[0-9]\{3,5\}$/ p' numbers.txt

范围可以只指定下限,或上限,比如{m,}或{,n}

sed -n '/^[0-9]\{3,\}$/ p' numbers.txt
sed -n '/^[0-9]\{,5\}$/ p' numbers.txt

单词边界 (\b)

元字符(\b)用于匹配单词边界。它匹配单词间的字符。

sed -n '/Zhao\b/ p' data.txt

反向引用(\n)

这里(\n) 中的n是数值。反向引用可以提取表达式里的内容供后面使用。

比如要"2022 2021 2023"按次序排列,其他就可以使用反向引用中\2 \1 \3来排序,排列的结果为"2021 2022 2023"

echo -e "2022 2021 2023" | sed -e "s/\(.*\) \(.*\) \(.*\)/\2 \1 \3/g"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102395.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PG]将一行数据打散成多行数据

原始数据 比如有如此表结构定义: 假如查询数据如下: select dt as "日期",bj_count as "北京", sh_count as "上海",gz_count as "广州", sz_count as "深圳" from city_stats order by dt--------------------…

PHP8的数组-PHP8知识详解

今天开始学习数组, 本文主要讲了三点:什么是数组、php8中数组的改进、数组函数。 一、什么是数组 在PHP8中,数组是非常重要的数据类型。相对于其他的数据类型,数组更像一种结构,而这种结构可以储存一系列数值。 数组…

phpstudy本地快速搭建网站,并外网访问【无公网IP】

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

思腾合力GPU服务器

布局智能生产基地!经开区思腾合力超前助力“东数西算”! 2022-04-20 18:41泰达服务 算力作为数字经济的核心生产力,是国民经济发展的重要基础设施。经开区企业思腾合力在“十四五”开局之年打造出集研发、生产、制造为一体的人工智能产业园…

RHCE——十九、shell编程之awk

RHCE 一、概念二、工作流程1、如图2、流程 三、awk程序执行方式1、通过命令行执行awk程序2、awk命令调用脚本执行3、直接使用awk脚本文件调用 四、awk命令的基本语法1、格式2、BEGIN模式与END模式3、awk的输出 五、记录和域1、概念2、示例3、使用-F参数指定域之间的间隔符4、使…

Ubuntu 20.04 网卡命名规则

Ubuntu 系统中网卡的命名规则是:Consistent Network Device Naming(一致网络设备命名)规范。这个规范的原理是根据固件、拓扑和位置信息分配固定名称。其中,设备类型 en 代表 Ethernet (以太网),wl 代表 WLAN&#xff…

mysql 大表如何ddl

大家好,我是蓝胖子,mysql对大表(千万级数据)的ddl语句,在生产上执行时一定要千万小心,一不小心就有可能造成业务阻塞,数据库io和cpu飙高的情况。今天我们就来看看如何针对大表执行ddl语句。 通过这篇文章,…

华为OD机试 - 二维伞的雨滴效应(Java JS Python)

题目描述 普通的伞在二维平面世界中,左右两侧均有一条边,而两侧伞边最下面各有一个伞坠子,雨滴落到伞面,逐步流到伞坠处,会将伞坠的信息携带并落到地面,随着日积月累,地面会呈现伞坠的信息。 1、为了模拟伞状雨滴效应,用二叉树来模拟二维平面伞(如下图所示),现在输…

TLS协议深度解析:挖掘现代网络安全防御的底层技术

正常简单的通讯 1、服务器生成一对密钥,公钥A、私钥A 2、浏览器请求服务器时,服务器把公钥A传给浏览器 3、浏览器随机生成一个对称加密的密码S,用公钥A加密后传给服务器 4、服务器接收后,用私钥A解密,得到密钥S 5、浏…

2023年高教社杯数学建模国赛 赛题浅析

2023年国赛如期而至,为了方便大家尽快确定选题,这里将对赛题进行浅析,以分析赛题的主要难点、出题思路以及选择之后可能遇到的难点进行说明,方便大家尽快确定选题。 难度排序 B>A>C 选题人数 C>A>B (预估结果&…

qt作业day4

//clock_exercise.cpp#include "clock_timer.h" #include "ui_clock_timer.h"//时间事件处理函数 void Clock_Timer::timerEvent(QTimerEvent *event) {if(event->timerId() time_id){sys_tm QDateTime :: currentDateTime(); // int year sy…

基于Python开发的DIY字符画程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的DIY字符画程序,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…