sed及grep用法详解

在linux系统有被称为文本处理三剑客grep,sed,awk.

今天与大家分享的就是gerp和sed处理工具,至于awk,我将会在晚些的时间与大家分享,在分享grep和sed之前我先要和大家说说正则表达,正则表达是什么呢,正则表达式就像是三剑客手里的剑,没有剑哪还能称的上什么剑客,所以我们要先了解以下正则表达式的简单用法。

什么是正则表达式:

“正则表达式是描述一组字符窜特征的模式,用来匹配特定的字符串。“--Ken Thompson

基本正则表达式的元字符有以下这些:

. :匹配任意单个字符;

[]:匹配指定范围内的任意单个字符;

如:[a-z], [A-Z], [0-9], [a-z0-9]

[:upper:]:所有大写字母

[:lower:]:所有小写字母

[:alpha:]:所有字母

[:digit:]:所有数字

[:alnum:]:所有的字母和数字

[:space:]:所有空白字符

[:punct:]:所有标点符号

[^]:匹配指定范围外的任意单个字符;

匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

*:匹配其前面的字符任意次;0,1,多次;

.*:匹配任意长度的任意字符

\?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;

\+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;

\{m\}:匹配其前面的字符m次;

\{m,n\}:匹配其前面的字符至少m次,至多n次;

\{0,n\}:至多n次

\{m,\}:至少m次

位置锚定:

^:行首锚定;用于模式的最左侧;

$:行尾锚定;用于模式的最右侧;

^PATTERN$:用于PATTERN来匹配整行;

^$:表示空白行;

^[[:space:]]*$:空行或包含空白字符的行;

单词:非特殊字符组成的连续字符(字符串)都称为单词;

\< 或 \b:词首锚定,用于单词模式的左侧;

\> 或 \b:词尾锚定,用于单词模式的右侧;

\<PATTERN\>:匹配完整单词;

好的现在可以介绍grep和sed了,grep是global searchregular expression(RE) and print out the line的缩写,光看名字这么长就知道这是一个很厉害的工具,嘿嘿,其实它能做到对用户所选择的过滤条件全文搜索匹配指定文件,并把相应的行显示出来,并且显示的是整行。也就是说只要有部分匹配就会整行显示。这个过滤条件可以是基本正则表达式或扩展正则表达式。正则表达式我也将会在晚些的博客中与大家分享。

grep的用法

grep[OPTIONS] PATTERN [FILE]...

grep[OPTIONS] [-e PATTERN | -f FILE] [FILE...]

这里的PATTERN就是过滤条件,加上-e参数后就可以匹配多个条件,后面的-f表示过滤条件可以从文件中读取。

PATTERN:可以是由正则表达式的元字符及文本字符所编写出的过滤条件。

常用选项如下:

--color=[always|never|auto]:对提配到的文本是否高亮显示;

-i:ignore-case,忽略字符大小写;

-o:仅显示匹配到的字符串本身,而不整行显示;

-v:显示能被匹配字符所在的行以外的所有行;

-E:支持扩展的正则表达式;

-q:静默模式,即匹配到字符,但不显示,一般用来判断文件是否存在;

-Anum:num用数字替换,表示显示匹配到的字符所在的行及后num行;   -Bnum:num用数字替换,表示显示匹配到的字符所在的行及前num行:

-Cnum:num用数字替换,表示显示匹配到的字符所在的行及前后各num行:

以下以-A选项为例:

grep需要和正则表达是才能发挥出威力,例如下面:

例一:显示/etc/passwd文件中以/bin/bash结尾的行;

例二:显示netstat -tan命令的结果中以LISTEN后跟0、1或多个空白字符结尾的行

例三:显示/etc/grub2.cfg文件中,以至少一个空白字符开头,且为数字结尾的行。

grep的用法就说这么多,基于正则表式还能组合出更多的用法,就大家研究去喽,下面该说说sed了。

三剑客之sed。

sed是一个行编辑器,通常sed编辑文件都不是直接编辑原文件的,而是将原文件复制一份在内存中进行编辑,在sed启动后内存空间中有一段空间pattern space和hold space,pattern space对复制来的文件进行逐行匹配,能被匹配到的我们就可以做指定编辑,sed可以对符合条件的行逐行编辑操作,也可以只对符合条件的部分进行编辑操作,处理完之后结果可以传送到stdout(标准输出),当然也可以选择删除,还可以选择存放到hold space中,不能匹配到的可以选择是否传送到标准输出。

关于sed用法:

sed[OPTIONS] ...’script’ [input-file]...

script:地址定界编辑命令,即对哪些文本,做什么样操作,注意地址定界和编辑命令之间没有空格。

注意:不论是否被patternspace匹配到,默认情况下原文件都会被输出到标准输出。

为了测试我建立了这样一个文本。

常用选项:

-n:不输出模式空间中的内容至屏幕;

-escript, --expression=script:多点编辑;

-f  /PATH/TO/SED_SCRIPT_FILE

每行一个编辑命令,多个命令组成的文件叫做脚本文件

-r,--regexp-extended:支持使用扩展正则表达式;

-i[SUFFIX],--in-place[=SUFFIX]:直接编辑原文件 ;

表示删除test1文件行首为1或2位数字开头后面跟一个符号,并只显示删除后行中有cd字母的行。

地址定界:

(1)  空地址:对全文进行处理;

(2) 单地址:

#:指定行;

/pattern/:被此模式所匹配到的每一行;

(3) 地址范围

#,#:

#,+#:

#,/pat1/

/pat1/,/pat2/

$:最后一行;

(4) 步进:~  左边数字为其实行,右边数字为步长,即每次匹配加几行如:1~2表示所有的奇数行。

编辑命令:

d:删除匹配模式匹配到的行;

p:显示模式空间中的内容;

这里第五行被显示了两遍,因为默认情况下pattern space空间中的内容也是会被输出的,-p之后又会被显示一遍,所以这里出现了两次第五行的内容。

a  \text:在行后面追加文本“text”,支持使用\n实现多行追加;

i  \text:在行前面插入文本“text”,支持使用\n实现多行插入;

c  \text:把匹配到的行替换为此处指定的文本“text”;

w/PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;

r  /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;

test2文件中存放的就是

=:为模式匹配到的行打印行号;

!:条件取反;

地址定界!编辑命令;

s///:查找替换,其分隔符可自行指定,常用的有[email protected]@@, s###等;

替换标记:

g:全局替换;

w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

p:显示替换成功的行;

高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中;

H:把模式空间中的内容追加至保持空间中;

g:把保持空间中的内容覆盖至模式空间中;

G:把保持空间中的内容追加至模式空间中;

x:把模式空间中的内容与保持空间中的内容互换;

n:覆盖读取匹配到的行的下一行至模式空间中;

N:追加读取匹配到的行的下一行至模式空间中;

d:删除模式空间中的行;

D:删除多行模式空间中的所有行;

有兴趣的可以自行研究研究。


时间: 2024-10-12 13:44:19

sed及grep用法详解的相关文章

grep用法详解 grep与正则表达式

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

grep正则表达式与grep用法详解

功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名 参数说明: -a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行 --color:以特定颜

grep用法详解:grep与正则表达式 [转]

正则表达式与通配符不一样,它们表示的含义并不相同. grep命令的选项用于对搜索过程进行补充说明.grep命令的模式十分灵活,可以是字符串.变量,还可以是正则表达式. 无论模式是何种形式,只要模式中包含了空格,就需要使用双引号或单引号将模式引起来. '搜寻字符串’是正则表达式,注意为了避免shell的元字符对正则表达式的影响,请用单引号(’’)括起来,千万不要用双引号括起来("”)或者不括起来.正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.g

[转载]强大的grep用法详解:grep与正则表达式

首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享下:1基础正则表达式grep 工具,以前介绍过.grep -[acinv] '搜索内容串' filename-a

linux系统 I/O重定向、管道及grep用法详解

输入/输出设备(INPUT OUTPUT) 系统设定 默认输出设备:标准输出 STDOUT 1 默认输入设备:标准输入 STDIN 0 标准错误输出:STDERR 2 默认标准输入:键盘 默认标准输出和错误输出:显示器 linux I/O重定向 >:覆盖输出 >>:追加输出 set -C:禁止对已经存在的文件使用覆盖重定向 强制覆盖输出:则使用>| set +C:关闭上述功能 2>:重定向错误输出 2>>:追加方式错误输出 &>:重定向标准输出和错误

linux中grep用法详解

查找特定字符串并颜色显示 [[email protected] test]# grep -n 'the' regular_express.txt --color=auto 8:I can't finish the test. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "gl

grep用法详解

格式: ** grep [-acinv] [--color=auto] '搜寻字串' filename** 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 -c :计算找到 '搜寻字串' 的次数 -i :忽略大小写的不同,所以大小写视为相同 -n :顺便输出行号 -v :反向选择,亦即显示出没有 '搜寻字串' 内容的那一行! --color=auto :可以将找到的关键字部分加上颜色的显示喔! 通过grep能匹配出我们需要的一些信息. [[email protect

awk.sed.grep三剑客详解

事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一.grep用法详解1.grep是干什么的grep的全名是Galobal research Regular Expression and Pringtiong,即搜索正则表达式,也就是说grep简单来讲就是用来搜索匹配字符的2.grep分类grep有基本正则表达式和扩展正则表达式之分,不过她们的作用域

grep, egrep及相应的正则表达式用法详解

grep, egrep及相应的正则表达式用法详解 一.grep/egrep Global search REgular expression and Print out的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. linux使用GNU版本的grep.它功能更强,可以通过-E.-F命令行选项来使用egrep和fgrep的功能(fgrep不使用