grep 和 sed:linux经常使用工具 & 基本正則表達式

简介:

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




本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5223027.html,如需转载请自行联系原作者

相关文章
|
8天前
|
Shell Linux C语言
|
14天前
|
数据挖掘 大数据 Linux
探索Linux中的snice命令:一个虚构但启发性的数据分析工具
`snice`是一个想象中的Linux命令,用于低优先级地从大数据集中抽样数据。它结合`nice`和`sampling`,支持多种抽样策略,如随机和分层。参数包括指定样本数、策略、输入输出文件和进程优先级。示例:`snice -n 1000 -s random -i large_log.txt -o sample_log.txt`。使用时注意资源管理、数据完整性及权限,并与其它工具结合使用。虽然虚构,但体现了Linux工具在数据分析中的潜力。
|
13天前
|
Linux
linux中 grep过滤查找 及 管道 ”|” 的使用
linux中 grep过滤查找 及 管道 ”|” 的使用
|
8天前
|
存储 缓存 安全
systemd-ask-password:Linux中的安全密码获取工具
`systemd-ask-password`是Linux的密码获取工具,安全收集服务或应用所需的密码。它支持TTY和密码代理输入,有隐藏输入、密码缓存功能。参数如`--no-tty`、`--id`、`--timeout`等可定制交互方式。示例包括直接在TTY请求或通过代理。注意事项包括安全环境、权限管理和密码管理。最佳实践涉及定期更新和使用强密码,以及日志审计。
|
20天前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed &#39;s/apple/orange/g&#39; example.txt`替换文本,`/error/d`删除包含&quot;error&quot;的行,`a\---`在每行后加&quot;---&quot;。使用时注意备份、测试命令和理解正则表达式。
|
22天前
|
监控 算法 Linux
Linux下工具tc详细讲解及限制IP和端口实例
TC (Traffic Control) 是Linux内核中提供的一个用于控制和管理网络流量的强大工具,它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。TC基于内核的队列 discipline (qdisc) 和流量类别(class) 体系结构,允许对进入或离开网络接口的数据流进行复杂的整形和过滤。
|
22天前
|
运维 Linux 应用服务中间件
Linux之自动化运维工具ansible、ansible模块(2)
Linux之自动化运维工具ansible、ansible模块(2)
|
22天前
|
运维 Linux Shell
Linux之自动化运维工具ansible、ansible模块(1)
Linux之自动化运维工具ansible、ansible模块(1)
|
22天前
|
缓存 网络协议 Linux
Linux下脚本编写局域网扫描工具
Linux下脚本编写局域网扫描工具
|
22天前
|
Unix Linux
Linux中grep命令的高级用法与实例
Linux中grep命令的高级用法与实例