Day05 egrep&正则表达式&sed

一、egrep

1.1 定义

以行为单位,逐行进行处理。默认只输出与表达式相匹配的文本行

1.2 基本格式

egrep [选项] ‘正则表达式‘ 文件...
前置命令 | egrep [选项] ‘正则表达式‘

1.3 常用命令选项

1.3.1 egrep -i

忽略大小写

1.3.2 egrep -v

条件取反

1.3.3 egrep -c

统计匹配的行数
egrep -c "." /etc/passwd#统计passwd有多少行

1.3.4 egrep -q

静默,不输出任何信息。可通过$?看结果是否正确

1.3.5 egrep -n

显示出匹配结果所在的行号

1.3.6 egrep -o

只输出匹配的内容,不是一行

1.3.7 egrep -A n key

输出匹配key关键字及关键字下面的n行

1.3.8 egrep -B n key

输出匹配key关键字及关键字上面的n行

1.3.9 egrep -C n key

输出匹配key关键字及关键字上下的n行

1.4 正则表达式

正则表达式使用一串特殊符号来描述有共同属性的的数据,一共有11个符号。
它相当于计算机世界里面的英语,即计算机里面的通用语言!

1.4.1 基本正则元字符

优点:兼容性强
缺点:书写麻烦

1.4.2 扩展正则元字符

优化基本正则、添加新的元字符。
优点:书写简单
缺点:兼容性差,grep就不支持

1.4.3 转义元字符

二、sed

2.1 概述

Stream EDitor,流式编辑器。
非交互,基于模式匹配过滤及修改文本。一行一行读取,逐行处理,并将结果输出到屏幕。可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作。

2.2 基本格式

sed [选项] ‘编辑指令‘ 文件
前置命令 | sed [选项] ‘编辑指令‘
选项:n,r,i
编辑指令:[定址符]处理动作
定址符:[条件1[,条件2]]
条件:行号或者/正则/
处理动作:p,d,s,a,i,c,r,w,H,h,G,g
举例:
sed -n ‘/^root/p‘ /etc/passwd #打印passwd文件中以root开头行

2.3 选项

2.3.1 sed -n

屏蔽默认输出

2.3.2 sed -r

支持扩展正则表达式,若与其他选项共用,必须作为首个选项

2.3.3 sed -i

对源文件进行实际操作

2.3.4 sed -e ‘‘ -e ‘‘ -e ‘‘ a.txt

同时对a.txt做三个操作

2.4 处理动作

2.4.1 p

打印
sed ‘3,5p‘ a.txt
打印a.txt的第3行,第5行

2.4.2 d

删除

2.4.3 s

替换关键字

2.4.4 a

在行号下面插入新的一行,如果行号为2,那么插入的行就是第3行
还可以插入多行,行之间用"\"连接
sed -i ‘1askip-networking‘ /etc/my.cnf#在第一行后面插入新行,内容为skip-networking

2.4.5 i

替换行号所在的一行,原来的行变成下一行,如果行号为2,那么插入的行就变成了第2行,原来的行变成了第3行

2.4.6 c

整行替换
sec ‘1c string‘ #把第一行替换为string

2.4.7 r

sed 3r c.txt
读取c.txt文件,把内容插入第3行之后

2.4.8 w

sed 1,3w c.txt#把1-3行另存为c.txt文件
sed ‘w a.txt‘ c.txt#全文复制c.txt的内容到a.txt

2.4.9 H h G g

sed复制粘贴功能
模式空间:存放当前处理的行,将处理结果输出。若当前行不符合处理条件,则原样输出。处理完当前行之后再读入下一行
保持空间:作用类似于粘贴板,默认存放一个空行(\n)
H命令的功能:拷贝模式空间的内容,追加粘贴到保持空间。保持空间里面的空行不会被覆盖
h命令的功能:拷贝模式空间的内容,覆盖粘贴到保持空间。保持空间里面的空行被覆盖
G命令的功能:拷贝保持空间的内容,追加粘贴到模式空间
g命令的功能:拷贝保持空间的内容,覆盖粘贴到模式空间
示例:
sed ‘1,3H;$G‘ reg.txt #把1-3行的内容追加粘贴到文件末尾
sed ‘1h;1d;$G‘ reg.txt #把第1行剪切到文件末尾
sed ‘1h;2H;1,2d;$G‘ reg.txt #把1,2行剪切,粘贴到原第3行后面

2.5 替换关键字动作详细解释

2.5.1 s/old/new/

替换每行的第1个old为new

2.5.2 s/old/new/3

替换每行的第3个old为new

2.5.3 s/old/new/g

替换全部的old为new

2.5.4 s/()/\num/

()保留,复制
\粘贴
最多可以记住9个

素材文件test.txt
ni hao nb
welcome to beijing

把第一个字符和最后一个字符对调
sed -r ‘s/^(.)(.*)(.)$/\3\2\1/‘ test.txt
把第一个字符括起来,把中间任意字符括起来,再把最后一个字符括起来。这样就有3个括号,序号从1-3,把3和1对调就实现了

把第二个字符和倒数第二个字符对调
sed -r ‘s/^(.)(.)(.*)(.)(.)$/\1\4\3\2\5/‘ test.txt

2.5.5 s/doc/&s/

把doc替换为docs

2.5.6 sed ‘4,7s/^/#/‘

将4-7行注释掉

2.6 sed命令示例

2.6.1 sed -n ‘4,+10p‘

输出第4行及后面的10行,一共11行

2.6.2 sed $d

删除最后一行

2.6.3 sed /^$/d

删除全部空行

2.6.4 sed ‘/xml/!d‘

删除不包含xml的行。!表示取反

2.6.5 sed -n /bash$/s#:.*##p /etc/passwd

查找能够登录系统的用户名

2.6.6 查找能够登录系统的用户名的密码

a=sed -n /bash$/s#:.*##p /etc/passwd
for i in $a
do
p1=grep "$i" /etc/shadow
p2=${p1:#:}
p3=${p2:%%:
}
echo $p3
done

原文地址:http://blog.51cto.com/355665/2071177

时间: 2024-10-14 07:44:10

Day05 egrep&正则表达式&sed的相关文章

grep和egrep正则表达式

Linux上文本处理三剑客 grep :文本过滤( 模式:pattern) 工具; grep, egrep, fgrep (不支持正则表达式搜索,但搜索纯文本的数据最快) sed :stream editor ,文本编辑工具: awk :Linux上实际是gawk(GUN awk) ,文本报告生成器: 正则表达式: 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 支持正则表达式的程序:grep, vim, less,nginx等 正则表达式

Linux中grep、egrep正则表达式的使用

正则表达式的由来 正则表达式,英文写法Regular Expression,在编程语言中常被简写为regex.regexp等.它是用来描述.匹配一系列符合某个句法规则字符串的单个字符串. 正则表达式通常被用来检索.替换那些符合某个模式(Pattern)的文本. 1950年代,UNIX之父Ken Thompson将正则表达式引入编辑器QED,然后是编辑器ed,最终引入到grep中.从此,正则表达式被广泛地应用到了各种UNIX或类UNIX系统的工具之中,例如perl. 近些年来,主流操作系统.主流开

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 基本正则表达式实例之查找集合字符: 有重复的字符时,可使用"[ ]

正则表达式sed学习(二)

sedsed是一个流编辑器,非交互式的编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)接着用 sed 命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed 要用来自动编辑一个或多个文件:简化对文件的反复操作:编写装换程序等 sed 增加 修改 查找 删除 增删改查 #查sed单行查询sed多行查询(地址范围)sed过滤功能 #增

grep与egrep正则表达式

表达式 含义 c 任何与自己匹配的非特殊字符c \c 去掉字符c的任何特殊意义 ^ 行首 $ 行尾 . 任意单个字符 [...] ...字符中的任一字符,像a-z这样的区间是合法的 [^...] 不在...中的任意单个字符 \n 第n个\(...\)所匹配的字符(仅于grep中) r* r出现零或多次 r+ r出现一或多次(仅于egrep中) r? r出现零或一次(仅于egrep中) r1r2 r2紧随r1 r1|r2 r1或r2(仅于egrep中) \(r\) 带标记的正则表达式r(仅于gre

grep,egrep正则表达式

正则表达式是指由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是变速控制或通配的功能. Grep 正则表达式分两类: 基本正则表达式和扩展正则表达式 语法格式:grep [OPTION]-.'PATTERN' FILE-. 基本正则表达式分为: 字符匹配和匹配次数.位置锁定.分组.grep选项 1.字符匹配指令字符集: .:匹配任意单个字符 []:匹配指定集合中的任意字符 [[:alnum:]]:[0-9a-zA-Z]代表匹配数字和大小写字符 [[:alpha:]]:[a-zA-Z]代

Linux中grep,egrep正则表达式基本用法

正则表达式 本人第一次写博文.由于最近刚好学到了正则表达式基本使用方法.整理了一下,以后用于回顾查找. 正则表达式基本说明: 基本来说,正则表达式式一种用来描述一定数量文本的模式,正则表达式的简写为REGEX 全称Regular Express. 首先正则表达式对于Linux运维工程师来说非常重要,这将伴随每一个运维工程师的职业生涯.说到正则表达式那么不得不说一下grep和egrep,grep全称是Globally search for a Regular Expression and prin

linux正则表达式sed

sed.awk工具可以实现文本替换并且把替换的文本输出到屏幕上 sed和awk都是流式编辑器,是针对文档的行来操作的.sed通常用来替换操作. 示例的文本内容,以下操作根据此文本. [[email protected] ~]# cat test.txt  rot:x:0:0:rot:/rot:/bin/bash root:x:0:0:root:/root:/bin/bash daemon:x:2:2:daemon:/sbin:/sbin/nologin rooooot:x:0:0/roooooo

linux正则表达式--sed

Linux之sed sed是stream editor(流式编辑器)的缩写,它可以对文本流.指定文件集或标准输入进行文本编辑.功能非常强大. sed命令的基本模式是: sed  [-参数]  '命令'  文本 1. sed两大原则 sed命令总是以单个字母开头.比如 [[email protected]]$echo "hello123" | sed 's/hello/HELLO/'  #把hello用HELLO替换HELLO123 上例中s是替换命令,s后面是分割符号,啥都行(一般用'