sed配合正则表达式应用

题目:要求用sed将/et/passwd的每一行的第一个数和最后一个单词交换位置

[[email protected] etc]# sed -n ‘1p‘ passwd

root:x:0:0:root:/root:/bin/bash

一、分析:sed替换配合正则表达式将会发挥最佳效果。下面来分析匹配特点:

因为passwd文件每一行的特点都是一样的,所以先提取第一列观察,题目要求将第一个数字和最后一个单词替换,所以整行至少会被分隔成4段,用sed替换()后向引用\1与\4交换位置即可。

特点分析

第1段root:x:         非数字

第2段0             纯数字

第3段:0:root:/root:/bin/ 不以字母或数字开头和不以字母或数字结尾

第4段bash           以字母结尾

二、写出匹配的表达式:

1.([^0-9]+)

2.([0-9]+)

3.([^0-9].*[^0-9])或者([^a-z].*[^a-z])

4.([a-z]+$)

三、验证:

情况1:[[email protected] etc]# sed -nr ‘1s#([^0-9]+)([0-9]+)([^0-9].*[^0-9])([a-z]+$)#\3#gp‘ passwd

:0:root:/root:/bin/bas

情况2:[[email protected] etc]# sed -nr ‘1s#([^0-9]+)([0-9]+)([^a-z].*[^a-z])([a-z]+$)#\3#gp‘ passwd

:0:root:/root:/bin/

经过验证发现,当以“非数字开头和非数字结尾”这个条件作为匹配时,是行不通的,因为在想要匹配的字段(:0:root:/root:/bin/)后面是字母bash,匹配完前面的部分,后面的字符依然符号匹配要求,所以此处只能以“不以字母开头&&者不以字母结尾”为匹配条件。

根据1.2.3.4匹配条件可以得出结论:要将一种类型字符作为匹配条件,尽量选择非此类型作为匹配条件,这样才能将匹配条件缩到最小。

时间: 2024-12-10 12:51:14

sed配合正则表达式应用的相关文章

awk   sed   grep     正则表达式

做事要有耐心. 虚心接受建议,你确实有很多缺点. 就算进步慢,也不可以停止前进的脚步. AWK awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有三种不同版本: awk   gawk    nawk 1.使用方法 awk '{pattern + action}' {filenames} 其中 pattern 表示 AWK 在数

字符串replace的理解和练习和配合正则表达式的使用

下面代码展示了(demo地址 https://codepen.io/peach_/pen/jONJjRY): 1.字符串replace的理解和练习和配合正则表达式的使用, 2.正则表达式学习 3.通过正则表达式实现千分位 // 字符串replace的理解和练习 //示例来源:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace var re = /(\w+)\

sed 及 正则表达式

一.sed基本概念 sed,流式编辑器 ,即把前一个程序输出引入到sed的输入,经过一系列编辑命令转换为另一种格式输出.默认使用Basic正则表达式规范,如若加 -r 选项则用Extended规范. 在Basic规范中,+.?.{ }.() .| 均表示普通含义,如果要使用其特殊含义,需使用 \ 转义,在Extended规范中则相反. sed在处理一行内容时,把当前处理的航存在临时缓冲区中(内存),称为模式空间,接着用sed命令处理模式空间的内容,处理完成后,把内容送往屏幕(但在某些时候,可以使

Linux shell脚本之 Sed 简介 正则表达式

Sed简介 sed是一款轻量级流编辑器,是stream editor的简写.由于sed是以行为单位进行编辑文件 , 因此也称为行编辑器.它无需直接编辑资料,能够将编辑工作自动化. sed工作方式: 由标准输入读取编辑文件,读入一行或指定行放到模式空间,然后将所有编辑指令逐一对模式空间的内容进行编辑,之后将结果输出到标准输出,同时清除模式空间.接下来再将下一行资料读入模式空间,如此重复之前的操作,直到最后一行,流编辑器停止.源文件不变 Ps: 1.模式空间为读入行所在的缓存,sed对文本行进行的处

Linuxshell脚本之蛋疼Sed简介正则表达式

Sed简介sed是一款轻量级流编辑器,是stream editor的简写.由于sed是以行为单位进行编辑文件 , 因此也称为行编辑器.它无需直接编辑资料,能够将编辑工作自动化.sed工作方式:由标准输入读取编辑文件,读入一行或指定行放到模式空间,然后将所有编辑指令逐一对模式空间的内容进行编辑,之后将结果输出到标准输出,同时清除模式空间.接下来再将下一行资料读入模式空间,如此重复之前的操作,直到最后一行,流编辑器停止.源文件不变Ps:1.模式空间为读入行所在的缓存,sed对文本行进行的处理都是在这

sed 命令+正则表达式

sed是一个非交互性性文本编辑器, 它编辑文件或标准输入导出的文件拷贝.标准输入可能是来自键盘.文件重定向.字符串或变量,或者是一个管道文件.sed可以随意编辑小或大的文件,有许多 sed命令用来编辑.删除,并允许做这项工作时不在现场.sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节省了时间.sed必须通过行号和正则表达式指定要改变的文本行 sed怎样读取数据: sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,

JavaScript中String对象的match()、replace() 配合正则表达式使用

正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串. 正则表达式的模板对象 //标准写法 regexp = new RegExp(pattern[, flag]); pattern: 模板的用法是关键,也是本章的主要内容. flag: "i"(ignore)."g&quo

sed结合正则表达式强化练习

1.删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符 [[email protected] ~]# sed -r 's#^[[:space:]]+##g' /etc/grub2.cfg # # DO NOT EDIT THIS FILE # # It is automatically generated by grub2-mkconfig using templates # from /etc/grub.d and settings from /etc/default/g

GNU/Linux平台上正则表达式的简单使用

友情提醒:本博文涉及的内容中涉及到的系统实践操作在Centos6.5上实现,GNU/Linux简称为linux,GNU/grep简称为grep,GNU/sed简称为sed,GNU/gawk简称为awk. -------------------------------------------------楔子--------------------------------------------- 小酒馆一角落,一胖三瘦围着方桌坐定,大快耳颐后正在唠嗑. 瘦子甲:"胖子,为什么要把正则表达式和lin