sed 本身是一门脚本工具 处理工具
awk 以文件形式存储的数据库 储存数据报表
shell script入门
正则表达式 是一个字符串,包含以下一个或多个项: 一个字符集 锚 修饰符
点 . 匹配除了新行符之外的任意一个字符 egrep 开启正则表达式
脱字符 _^__匹配一行的开头,但依赖于上下文环境,可能在正则表达式中表示否定一个字符集的意思 cat tmp.txt |egrep “^a“ 开头是a的显示
美元符–$–在正则表达式中匹配行尾 cat tmp.txt |egrep “a$“ 结尾是a的显示 cat tmp.txt |egrep “^a.*c$” 开头是a 结尾是c 中间是啥都行, 其中*代表零个或者多个
方括号–[ ] 在正则表达式中表示匹配括号中的一个字符
反斜杠字符 \ 转义一个特殊的字符,是这个字符表示原来字面上的意思
转义尖角号 \<…\> 用于表示单词的边界
* 含义 cat tmp.txt |egrep -o “dd.*” *代表匹配零次或者多次
sed是流线型、非交互式编辑器,一次处理一行 ,不能任意修改,它允许你执行与vi和ex编辑器里一样的编辑任务。sed程序不是与编辑器交互式工作的,而是让你在命令行敲入编辑的命令,然后再屏幕上查看命令输出的结果。
sed编辑器 按一次处理一行的的方式来处理文件,并把结果输出到屏幕。
sed介绍一下内容:
打印命令p 删除命令d 替换命令s
cat tmp.txt |sed -n ‘ 1p’ 打印第一行 cat tmp.txt |sed -n ‘ 1,3p’ 打印第一行到第三行
cat tem.txt |sed ‘3d’ 删除第三行
sed 替换的基本格式 sed’s / sth / oth/ ‘ file 把sth 替换成oth
cat tmp.txt |sed ‘s /dd/cc’ 把dd换成cc 这是打印的 不是对原文件的操作 注意 s替换的时候只会替换第一个出现的dd
cat tmp.txt |sed ‘3s /dd/cc’ 只把第3行把dd换成cc 这是打印的
cat tmp.txt |sed ‘3,5s /dd/cc’ 只把第3行到第5号 内的 dd换成cc 这是打印的
匹配行的替换
cat tmp.txt |sed ‘/^cc/s/a/zz/’ 匹配开头为cc行 把a 替换成zz 先匹配再替换
cat tmp.txt |sed ‘ /^bb/,/^dd/s/cc/zz/g’ 匹配行bb 到 dd 行 中把cc 替换成zz
cat tmp.txt |sed ‘s/aa*\(.*\)/\1/’
面试题 把文件后缀txt 改成jpg 自己搜一下 使用内存空间
sed ‘s/.*\.txt//’
ls | sed ‘s/\(
匹配单个字符
1.匹配固定单个字符
2.匹配任意单个字符
.
3.匹配“.”元字符 \. 转义字符
4.匹配字符组
4.1 字符组的基本语法 语法是 “[dt]”。中括号是特殊标记,用以划定属于组内的字符的界限,它所代表的含义是:“匹配d或者t”。
4.2 在字符组中使用字符区间 起始字符 和 结束字符,依据的是它的 ASCⅡ值的大小,即是说,将会匹配其ASCⅡ码位于 起始字符 和 结束字符 的ASCⅡ之间的所有字符(包含起始、结束字符) “[0-9]”
4.3 反义字符组 [^字符集合]
5.匹配特殊字符
5.1 匹配元字符 需要使用“\”来对它进行转义
5.2 匹配空字符
元字符 |
匹配描述 |
\r |
回车 |
\n |
换行 |
\t |
Tab 键 |
5.3 匹配特定字符类型
l 对于“.”和“[”等来说,它们本身就是 元字符,而当给它们前面加上转义字符“\”的时候,它们才代表一个普通字符:“\.”匹配字符“.”,“\[”匹配字符“[”。
l 对于“r”和“n”等来说,它们本身只是 普通字符,而只有当加上转义字符“\”的时候(变成了“\r”和“\n”),它们才代表着元字符:“\r”匹配空字符回车,“\n”匹配空字符换行。
5.3.1
匹配数字类型
元字符 |
匹配描述 |
\d |
所有单个数字,与 [0-9] 相同 |
\D |
所有非数字,与 [^0-9] 相同 |
5.3.2
匹配字母、数字、下划线
元字符 |
匹配描述 |
\w |
所有单个大小写字母、数字、下划线,与 [a-zA-Z0-9_] 相同 |
\W |
所有单个非大小写字母、非数字、非下划线,与 [^a-zA-Z0-9_] 相同 |
5.3.3
匹配空字符
元字符 |
匹配描述 |
\s |
所有单个空字符,与 [\f\n\r\t\v] 相同 |
\S |
所有单个非空字符,与 [^\f\n\r\t\v] 相同 |
匹配多个字符
1. 匹配一个或多个 正则表达式中,可以在 单个字符(比如“j”)、字符组(比如“[abcde]”)、特定字符类型(比如“\d”)、单个任意字符(即“.”) 后面加“
+
”,来表示匹配一个或多个(换言之,至少一个)字符组成的字符串。
“-”只在字符组“[]”区间内才是一个元字符,在“[]”以外是普通字符。在此处,“.”在“[]”区间以外才是元字符,用以匹配任意单个字符,而在“[]”区间以内,它就变成了一个普通字符。
2.匹配零个或多个字符
正则表达式中,可以在 单个字符(比如“j”)、字符组(比如“[abcde]”)、特定字符类型(比如“\d”)、单个任意字符(即“.”) 后面加“
*
”,来表示匹配零个或多个字符组成的字符串。
3.匹配零个或一个字符串
正则表达式中,使用“
?
”来匹配零个或一个字符。其使用方式与“+”和“*”相同。
4.匹配指定数目字符
4.1 匹配固定数目的字符
正则表达式中,可以在 单个字符(比如“j”)、字符组(比如“[abcde]”)、特定字符类型(比如“\d”)、单个任意字符(即“.”) 后面加“{数字}”,来表示匹配零个或多个字符组成的字符串。
4.2 匹配区间以内数目的字符
正则表达式中,使用“{最小数目,最大数目}”的语法来实现,它的使用方式与上一节介绍的匹配固定数目字符的语法相同。
5.贪婪匹配和惰性匹配
5.1 贪婪匹配、惰性匹配概述
贪婪匹配 |
惰性匹配 |
匹配描述 |
? |
?? |
匹配0个或1个 |
+ |
+? |
匹配1个或多个 |
* |
*? |
匹配0个或多个 |
{n} |
{n}? |
匹配n个 |
{n,m} |
{n,m}? |
匹配n个或m个 |
{n,} |
{n,}? |
匹配n个或多个 |
注意: 这里有个重要的搜索引擎优化常识,大家注意到本文档的命名,我采用的是:Regular-Expression-Tutorial.pdf,为什么不用下划线分隔,命名成Regular_Expression_Tutorial.pdf 呢? 因为当搜索引擎看到“-”的时候,会把它视为一个空格“ ”,而看到下划线“_”的时候,会把它视为空字符“”,实际上,下划线的正确叫法是“连字符”。于是,当我命名为Regular-Expression-Tutorial.pdf时,搜索引擎看到的是: Regular Expression Tutorial.pdf,而当我命名成Regular_Expression_Tutorial.pdf 时,搜索引擎看作RegularExpressionTutorial.pdf 。