grep 见链接:http://www.cyberciti.biz/faq/grep-regular-expressions/

sed參考文章:http://www.thegeekstuff.com


sed工作原理

This is called as one execution cycle. Cycle continues till end of file/input is reached:

1. Read a entire line from stdin/file.

2. Removes any trailing newline.

3. Places the line, in its pattern buffer.

4. Modify the pattern buffer according to the supplied commands.

5. Print the pattern buffer to stdout.


sed使用语法:

sed [-nefri] [命令]

描写叙述:

-n :使用安静(silent)模式。在一般 sed 的使用方法中,全部来自 STDIN 的数据一般都会被列出到终端上。

但假设加上 -n 參数后。则仅仅有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进行 sed 的动作编辑。

-f :直接将 sed 的动作写在一个文件内。 -f filename 则能够运行 filename 内的 sed 动作。

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i :直接改动读取的文件内容。而不是输出到终端。

匹配的的格式(行号,模式字符串):

ADDRESS(行号):

n : 匹配第几行

m,n : 从m到n行

m~n :从m行開始。每隔n行

'$' : 最后一行

PATTERN(字符串):

/sometext/ : 匹配有sometext字符串的行


sed -n 'ADDRESS'p filename  // print, e.g: sed -n '4'p text.txt。

'ADDRESSp',即将p放在单引號中也是能够的。或者将单引號换成双引號"ADDRESSp"也是一样,下同。
sed -n '/PATTERN/p' filename // e.g: sed -n '/aa/p' text.txt sed -n 'ADDRESS'd filename //delete,不会删除文件里的内容。仅仅是在标准输出中删除该行。 sed -n '/PATTERN/d' filename sed 'ADDRESS a\
some text' filename //append,在匹配行的下一行加入"some text",注意单引號
sed '/PATTERN/ a\
some text' filename sed 'ADDRESS i\
some text' filename // insert,在匹配行前插入一行
sed '/PATTERN/ i\
some text' filename sed 'ADDRESS c\
some text' filename // 替换匹配行
sed 'PATTERN c\
some text' filename sed -n 'ADDRESS'= filename //打印匹配的行号, 仅仅接受一个地址,假设打印多行使用{}括起来,例如以下
sed -n 'ADDRESS,/PATTERN/ {
=
p
}' filename

运行多条sed命令

sed -e: use multiple -e options to build up a script out of many parts。

-e option is optional for sed with single command. sed will execute the each set of command while processing input from the pattern buffer

-e script, --expression=script

    add the script to the commands to be executed

样例:

sed -e 's/foo/bar/' -e '/FOO/d'

解释:先用bar替换foo,然后再删除有字符串FOO的行


sed 正則表達式查找和替换

's' 命令应该是sed中最重要的命令,语法例如以下:

sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename

样例:

sed '1s/aa/bb/' text.txt        //用bb替换aa。仅仅在aa第一次出现的地方进行替换
sed '2s/aa/bb/' text.txt //用bb替换aa,仅仅在aa第二次出现的地方进行替换
sed 's/aa/bb/g' text.txt //用bb替换aa。g(global )是全局替换的意思。不加g默认也是全局替换。
sed -n 's/aa/bb/gpw result.txt' text.txt //g全局替换,p打印,w将替换结果写到result.txt文件里 sed 's/...$//' text.txt //正則表達式匹配:将最后位置的前三个字符替换为空。即删除每行的最后三个字符。

基本正則表達式

. : 代表随意单个字符

演示样例: a.b : 表示acb/a*b/a b/a9b… 都能够但不能是accb/ab

[] : 指定范围内的单个字符

演示样例: a[c|d]b : 表示acb/adb 其它的都不能够

[^ ] : 取反。非指定范围内的单个字符

演示样例:a[^d]b : 表示除了adb 其它的acb/abb/a b…都能够

? : 反复前边的字符0次或1次

演示样例:a?b : 表示ab/aab 其它的都不能够

* : 反复前边的字符无限次

演示样例:a* : 表示a/aa/aaa/aaaa… 能够反复a无限次

.* : 随意长度的随意字符

演示样例:a.* : 表示a/ac/acc/a,b … 能够是a后边跟随意字符

\{m,n\} : 反复前边的字符至少m次,最多n次。必须加上反斜杠转义

演示样例:a{1,3} : 表示 a/aa/aaa 能够反复a最少1次最多3次

\{m,\} : 反复前边的字符至少m次,必须加上反斜杠转义

演示样例:a{2,} : 表示aa/aaa/aaaa… 能够反复a最少2次最多不限

\{0,n\} : 反复前边的字符最多n次,必须加上反斜杠转义

演示样例:a{0,3} : 表示 空/a/aa/aaa 能够反复a最多3次也能够不反复也就是空

\{m\} : 反复前边的字符精确匹配m次,必须加上反斜杠转义

演示样例:a{2} : 表示 aa 精确匹配反复a2次

^ : 行首匹配,必须出如今行首

演示样例:^a : 表示全部以a开头的行

$ : 行尾匹配。必须出如今行尾。注意词尾与行尾的差别

演示样例:a$ :表示全部以a结尾的行

^$ : 空白行

\< : 词首匹配。必须出如今词首

演示样例:\< a : 表示a/acv/abcc… 全部以a开头的单词

\> : 词尾匹配,必须出如今词尾,注意词尾与行尾的差别

演示样例:a> : 表示a/cda/cca/… 全部以a结尾的单词

\(\) : 分组字符,可用\1引用左数第一个(中包括的内容

演示样例: a\(abc\)\1 表示:aabcabc \1引用了()中的abc

[ :upper: ] : 单个随意大写字母,注意[]与:之间有个空格,下同

演示样例:a[:upper:] 表示:aA/aB/aC… a后边跟随意一个大些字母

[ :lower: ] : 单个随意小写字母

[ :space: ] : 单个空白字符

[^[ :space: ]] : 单个非空白字符

[ :digit: ] : 单个随意数字0-9

演示样例:a[:digit:]b 表示: a0b/a1b/a2b… a和b中间跟随意一个0-9的数字

[ :alpha: ] : 单个随意字母

[ :alnum: ] : 单个随意字母或数字

[:punct:] : 单个随意特殊符号

扩展正則表達式元字符:

扩展正則表達式简化了基本正则中的一个元字符。又添加了几个。

\{m,n\} → {m,n} : 使用方法与基本正则中的一样

演示样例:a{1,3} 表示: a/aa/aaa

\(\) → () : 使用方法与基本正则中的一样

演示样例:(abc)\1 表示:abcabc

+ : 匹配前边的字符一次或多次

演示样例:a+ 表示: a/aa/aaa/aaaa…

| 表示或

演示样例:(a|b)c 表示: ac/bc

grep 和 sed:linux经常使用工具 &amp; 基本正則表達式的更多相关文章

  1. Linux正則表達式-定位元字符

    有两个元字符用于指定字符串出如今行首或行末.脱字符(^)是指示開始的单字符正則表達式.美元符号($)是指示行结尾的单字符的正則表達式.这些通常称为"定位符",由于它们将匹配限定在特 ...

  2. 轻松学习之Linux教程六 正則表達式具体解释

    本系列文章由@超人爱因斯坦出品.转载请注明出处. 作者:超人爱因斯坦    个人站点:http://www.hpw123.net          文章链接:http://hpw123.net/a/L ...

  3. shell文本过滤编程(一):grep和正則表達式

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有非常多文件,比方配置文件.日志文件.用户文件等 ...

  4. linux系统之shell编程-正則表達式

    shell编程正則表達式: 1:元字符   [ ]  .   *  ? + ( )  |  {  }  ^  $ 2 : [a-z0-9]  表示匹配随意数字和字母的一个 3 :  [^a-z]    ...

  5. Linux正則表達式-反复出现的字符

    星号(*)元字符表示它前面的正則表達式能够出现零次或多次.也就是说,假设它改动了单个字符.那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个.能够使用星号元字符匹配出如今引號中 ...

  6. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

  7. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  8. Linux 文本处理工具grep,sed,awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  9. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

随机推荐

  1. 哈希表原理及hashmap简单实现

    哈希表也叫做散列表.在各种语言中都有hashmap的实现.其最突出的优点是查找和插入以及删除具有常数的时间复杂度 我们可以把哈希表理解为数组+链表 数组具有常数复杂度的查找,为什么呢,因为数组是在内存 ...

  2. bash及其特性(笔记)

    bash及其特性:shell: 外壳GUI:Gnome, KDE, XfceCLI: sh, csh, ksh, bash, tcsh, zsh root, student程序:进程 进程:在每个进程 ...

  3. SQL 通配符

    在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用,必须放在引号内. 在 SQL 中,可使用以下通配符: %:替代一个或多个字符. _:仅替代 ...

  4. Young Table(暴力,交换位置)

     Young Table Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submi ...

  5. STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)

    向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back()    传回最后一个数据,不检查这个数据是否存在 ...

  6. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  7. mysql的常用操作的封装

    1.概述: 为了把繁琐的操作简化成简单的类,设计了2个类用来封装了mysql的常用操作,以便使用者可以方便地使用. 2.组成 1)数据库操作类CDatabaseConnect 2)SQL对象类CSql ...

  8. H5单页面架构:requirejs + angular + angular-route

    说到项目架构,往往要考虑很多方面: 方便.例如使用jquery,必然比没有使用jquery方便很多,所以大部分网站都接入类似的库: 性能优化.包括加载速度.渲染效率: 代码管理.大型项目需要考虑代码的 ...

  9. UBUNTU系统常用基本命令

    1.系统基本信息查询查看内核#uname -a 查看Ubuntu版本#cat /etc/issue 查看内核加载的模块#lsmod 查看PCI设备#lspci 查看USB设备#lsusb 查看网卡状态 ...

  10. linux进程间通信之共享内存篇

    本文是对http://www.cnblogs.com/andtt/articles/2136279.html中共享内存(上)的进一步阐释说说明 1 共享内存的实现原理 共享内存是linux进程间通讯的 ...