生物信息学基础教程第4讲正则表达式教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
① ②
awk ‘$3 ~ /*^d+/’ input_file awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file
actions的格式
actions是对awk读取记录进行的操作 actions由一条或多条语句或命令组成, 语句之间用分号分隔
-n
-s -v -w
grep正则表达式元字符
^ $ . 锚定行的开始 锚定行的结束 ‘^grep’匹配所有以grep开始的行 ‘grep$’匹配所有以grep结束的行
匹配一个非换行符的任意 ‘gr.p’匹配gr后跟一个任意字符,后为p的行 字符
*
[] [^] \( \) \< \>
匹配0个或多个先前字符
sed ‘s/^.//g’ temp.txt
sed ‘s/COL\(…\)//g’ temp.txt sed ‘s/^\///g’ temp.txt
AWK教程
——文件模式提取教程
AWK简介
Linux下的awk有三个版本:awk、nawk、 gawk,一般所说的awk是指/bin/awk,也 就是gawk (GNU awk) awk的功能:
sed教程
——非交互性文本编辑
sed简介
首先用which sed查看一下sed的位置
一个非交互性文本编辑器,编辑文件或 标准输入导出的文件拷贝 sed可以随意编辑小文件或者大文件 一次性处理所有改变,高效率
通过行号和正则表达式指定需要编辑的 行
sed用法
从文件的一个文本行或标准输入中读取 数据,并将其拷贝到一个编辑缓冲区 读取命令行或者脚本的第一条命令,并 用该命令查找模式或定位行号并编辑, 重复过程直到命令结束 sed *option+ ‘sed_command’ input_file sed [option] –f sed_script_file input_file sed_script_file [option] input_file
源自文库 grep教程
——正则表达式的应用
grep简介
是Global search regular expression (RE) and Print out the line的缩写 强大的文本搜索工具,使用正则表达式搜索文 本,并打印匹配的行 在一个或者多个文件中搜索字符串模式,搜索 的结果输出到屏幕,不影响文件内容
VIM教程
——linux下最常用的文本编辑器
VIM编辑器
三种模式:各种模式之间切换
从命令行模式到插入模式:按下i键 从命令行模式到附加模式:按下a键 返回命令行模式:按下ESC键 保存并退出:在命令行模式按下:wq
退出编辑
不保存退出:在命令行模式按下:q! 保存:在命令行模式按下:w 另存为其他文件名:按下:w filename
VIM编辑功能
光标跳到文件头:命令行模式下按2下g 光标跳到文件尾:按下:$ 光标跳到行首:按下^ 光标跳到行末:按下$ 跳到100行:按下100g
VIM查找功能
底行模式下输入/pattern/回车,对应符合 pattern的文本就会显示为高亮
底行模式下输入:m,n/pattern/,就会在第 m行到第n行查找pattern并高亮显示
awk命令
① ② ③
④
⑤
print “$1= ”, $1 printf:与c语言的printf类似 next:读取下一条记录并处理 nextfile:读取文件列表的下一个文件 exit:awk停止执行并跳出。如果有END存在, awk会执行END的actions
awk语句
赋值语句 流程控制结构
生物信息学基础教程
第4讲:正则表达式教程
——正则表达式与模式匹配
本节内容
正则表达式
正则表达式的定义与表示方法 正则表达式中的元字符(metacharacter)
VIM编辑器 grep命令 sed编辑器 awk工具
正则表达式
所谓正则表达式(regular expression, RE), 指的是符合某种模式的字串,常 用于从文件中或者字符串中查找和替换 某些符合某种规则的字串
基本sed编辑命令
p = a\ i\ d n c\ s r w 打印匹配行 显示文件行号 在定位行号后附加新文本 在定位行号后插入新文本 删除定位行 sed –n ‘2,3’p test.txt sed –n ‘/movie/’p temp.txt sed –e ‘/music/=’ temp.txt sed ‘/jack/ \a “here add new line”’p temp.txt sed ‘4 \i “here add new line”’p temp.txt sed ‘/music/’d temp.txt
awk脚本的运行机制
1. 2. 3. 4.
5. 6.
如果存在BEGIN区块,执行其中的actions 从输入文件中读取一行,称为读入一条记录 将读入的记录按照分隔符(FS/IFS)分割为多个字段, 依次为$1,$2,…., 而$0表示整条记录。 将当前输入记录与awk_pattern相比较,如果匹配则 执行actions,如果不匹配则跳过读入下一条记录, 重复执行3,4,直到文件尾 awk把输入文件的数据读入内存,然后操作内存中的 输入数据副本,不会修改输入文件的内容 awk总是输出到标准输出,如果需要输出到文件,可 采用重定向
grep用法
grep *option+ ‘pattern’ input_files
常用grep命令选项
-? -c -f file -i -q -l -l ?为数值,同时显示匹配行的前后? grep -2 ‘grep’ test.txt同时显示匹配行的 行 前后2行 --count,只打印匹配行的行数,而 不输出匹配行 从输入文件中提取模式 --ignore-case,忽略大小写 --quiet,取消显示 仅打印匹配模式的文件清单 打印不匹配模式的文件清单 --line-number,在匹配行前打印行 号 --silent,不显示错误信息 --revert-match,只显示不匹配的行 --word-regexp,如果被\<和\>引用, 就把表达式作为一个单词搜索
awk 'BEGIN ,x=1 ; y=3 ; x=y ; print "x=" x " ; y=" y -‘ awk 'BEGIN {x=3 ; x+=2 ; y=x+2 ; print "x=" x " ; y=" y }'
① if (condition) {then-body} [else {else-body}] ② while (condition) {body} ③ do {body} while (condition) ④ for (initialization; condition; increment) {body} 与C语言的for结构的 语法相同 ⑤ break : 跳出包含它的for、while、do-while 循环 ⑥ continue : 跳过for、while、do-while循环的body的剩余部分,而立 刻进行下一次循环的执行
基于指定规则从文件或者字符串中分解抽提 信息 基于指定的规则输出数据
awk的三种执行方式
1.
2.
awk *option+ ‘awk_script’ input_file1 *input_file2 …+
将awk_script放入脚本文件并以#!/bin/awk –f 作为首 行,并赋予该脚本可执行权限,然后在shell下调用该 脚本名称执行awk_script的内容:awk_file input_file 将所有awk_script放入一个单独的脚本文件,然后用 awk –f awk_file input_file(s)执行脚本
‘*grep’匹配所有0个或多个空格紧跟grep的行
匹配一个指定范围的字符 ‘*Gg+rep’匹配包含Grep或grep的行 匹配不在指定范围内的一 ‘*^A-FH-Z+rep’匹配所有不在A-F和H-Z范围内字符后跟rep的行 个字符 标记匹配字符 ‘\(love\)’中可以匹配love,且love被标记为\1
匹配所有单个(非)字母和数字字符
只匹配单词grep,不匹配egrep等
练习题:这些命令都能干啥?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
11.
12. 13. 14.
ls –l | grep ‘^a’ grep ‘test’ d* grep ‘test’ aa bb cc grep ‘*a-z]\{5\-’ aa grep ‘w\(es\)t.*\1’ aa grep ‘^n’ datafile grep ‘4$’ datafile grep ‘5\..’ datafile grep ‘\.5’ datafile grep ‘^*wesn+’ datafile grep ‘*A-Z][A-Z] [A-Z+’ datafile grep ‘ss* ’ datafile grep ‘*a-z]\{9\-’ datafile grep ‘\<[a-z].*n\>’ datafile
awk内部变量
自动内部变量
① ② ③ ④ ⑤ ⑥
NF:当前输入字段的字段数 NR:当前输入文件已经被读过的行数 FNR:所有输入文件中已经被读过的行数 FILENAME:当前输入文件的文件名 ARGC:命令行参数个数,输入文件数目+1 ARGIND:当前处理文件在ARGV内的索引
从另一个文本中读取下一行, sed ‘/movie/n temp2.txt’ temp.txt 并附加到下一行 用新文本替换定位文本 sed ‘4 \c “i like it”’ temp.txt 用替换模式替换相应模式 从另一个文本中读取文本 写文本到另一个文件 sed ‘s/source/okstr/”add before” &/p’ temp.txt sed ‘/name/r temp2.txt’ temp.txt sed ‘s/name/”my ” &/w temp2.txt’ temp.txt
练习题:这些命令能干什么?
sed ‘s/\.$//g’ temp.txt sed –e ‘/abcd/d’ temp.txt sed ‘s/ */ /g’ temp.txt
sed ‘s/^*+*+*//g’ temp.txt
sed ‘s/\.*+*+*/*+/g’ temp.txt sed ‘/^$/d’ temp.txt
3.
awk脚本的组成
可由一条或多条awk_cmd组成,两条awk_cmd 之间一般以NEWLINE分割 awk_cmd由两部分组成:awk_pattern { actions } awk命令的一般形式
awk ‘BEGIN , actions - awk_pattern1 , actions - … awk_patternN ,actions- END , actions -’ input_file 其中BEGIN 和END模块是可选的
sed命令的选项
-n -e Quiet, 不自动打印编辑 行,默认是打印的 下一命令是编辑命令, 使用多项编辑时加入此 选项 其后加sed脚本文件
-f
sed定位行号的方法
x x, y x~y /pattern/ x,y! 行号,指定某一行 指定x-y范围的行 从第x行开始,每隔y行 查询包含该模式的行 查询不包含指定行号x和y的行
分别锚定一个单词的起始 ‘\<grep’匹配以grep开始的单词 和结束 ‘grep\>’匹配以grep结束的单词 x正好重复5次的行、至少重复5次的行、重复次数在5-10次之 间的行
x\{5\}, x\{5,\},x\{5,10\} \w = [A-Za-z0-9] \W=[^A-Za-z0-9] \bgrep\b
awk_pattern的格式
1.
正则表达式 /regexp/
① ② ③
通用的正则元字符: [] ^ $ . | () * +是awk特有的元字符,匹配其前的单个字符一次以上 ?也是awk特有的元字符,匹配其前的单字符0/1次
举例:awk ‘/*\$0\.[0-9][0-9+.*/’ input_file 2. 布尔表达式 “==”,“>”, “~/regexp/”,“&&”, “||” 举例
awk ‘$3 ~ /*^d+/’ input_file awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file
actions的格式
actions是对awk读取记录进行的操作 actions由一条或多条语句或命令组成, 语句之间用分号分隔
-n
-s -v -w
grep正则表达式元字符
^ $ . 锚定行的开始 锚定行的结束 ‘^grep’匹配所有以grep开始的行 ‘grep$’匹配所有以grep结束的行
匹配一个非换行符的任意 ‘gr.p’匹配gr后跟一个任意字符,后为p的行 字符
*
[] [^] \( \) \< \>
匹配0个或多个先前字符
sed ‘s/^.//g’ temp.txt
sed ‘s/COL\(…\)//g’ temp.txt sed ‘s/^\///g’ temp.txt
AWK教程
——文件模式提取教程
AWK简介
Linux下的awk有三个版本:awk、nawk、 gawk,一般所说的awk是指/bin/awk,也 就是gawk (GNU awk) awk的功能:
sed教程
——非交互性文本编辑
sed简介
首先用which sed查看一下sed的位置
一个非交互性文本编辑器,编辑文件或 标准输入导出的文件拷贝 sed可以随意编辑小文件或者大文件 一次性处理所有改变,高效率
通过行号和正则表达式指定需要编辑的 行
sed用法
从文件的一个文本行或标准输入中读取 数据,并将其拷贝到一个编辑缓冲区 读取命令行或者脚本的第一条命令,并 用该命令查找模式或定位行号并编辑, 重复过程直到命令结束 sed *option+ ‘sed_command’ input_file sed [option] –f sed_script_file input_file sed_script_file [option] input_file
源自文库 grep教程
——正则表达式的应用
grep简介
是Global search regular expression (RE) and Print out the line的缩写 强大的文本搜索工具,使用正则表达式搜索文 本,并打印匹配的行 在一个或者多个文件中搜索字符串模式,搜索 的结果输出到屏幕,不影响文件内容
VIM教程
——linux下最常用的文本编辑器
VIM编辑器
三种模式:各种模式之间切换
从命令行模式到插入模式:按下i键 从命令行模式到附加模式:按下a键 返回命令行模式:按下ESC键 保存并退出:在命令行模式按下:wq
退出编辑
不保存退出:在命令行模式按下:q! 保存:在命令行模式按下:w 另存为其他文件名:按下:w filename
VIM编辑功能
光标跳到文件头:命令行模式下按2下g 光标跳到文件尾:按下:$ 光标跳到行首:按下^ 光标跳到行末:按下$ 跳到100行:按下100g
VIM查找功能
底行模式下输入/pattern/回车,对应符合 pattern的文本就会显示为高亮
底行模式下输入:m,n/pattern/,就会在第 m行到第n行查找pattern并高亮显示
awk命令
① ② ③
④
⑤
print “$1= ”, $1 printf:与c语言的printf类似 next:读取下一条记录并处理 nextfile:读取文件列表的下一个文件 exit:awk停止执行并跳出。如果有END存在, awk会执行END的actions
awk语句
赋值语句 流程控制结构
生物信息学基础教程
第4讲:正则表达式教程
——正则表达式与模式匹配
本节内容
正则表达式
正则表达式的定义与表示方法 正则表达式中的元字符(metacharacter)
VIM编辑器 grep命令 sed编辑器 awk工具
正则表达式
所谓正则表达式(regular expression, RE), 指的是符合某种模式的字串,常 用于从文件中或者字符串中查找和替换 某些符合某种规则的字串
基本sed编辑命令
p = a\ i\ d n c\ s r w 打印匹配行 显示文件行号 在定位行号后附加新文本 在定位行号后插入新文本 删除定位行 sed –n ‘2,3’p test.txt sed –n ‘/movie/’p temp.txt sed –e ‘/music/=’ temp.txt sed ‘/jack/ \a “here add new line”’p temp.txt sed ‘4 \i “here add new line”’p temp.txt sed ‘/music/’d temp.txt
awk脚本的运行机制
1. 2. 3. 4.
5. 6.
如果存在BEGIN区块,执行其中的actions 从输入文件中读取一行,称为读入一条记录 将读入的记录按照分隔符(FS/IFS)分割为多个字段, 依次为$1,$2,…., 而$0表示整条记录。 将当前输入记录与awk_pattern相比较,如果匹配则 执行actions,如果不匹配则跳过读入下一条记录, 重复执行3,4,直到文件尾 awk把输入文件的数据读入内存,然后操作内存中的 输入数据副本,不会修改输入文件的内容 awk总是输出到标准输出,如果需要输出到文件,可 采用重定向
grep用法
grep *option+ ‘pattern’ input_files
常用grep命令选项
-? -c -f file -i -q -l -l ?为数值,同时显示匹配行的前后? grep -2 ‘grep’ test.txt同时显示匹配行的 行 前后2行 --count,只打印匹配行的行数,而 不输出匹配行 从输入文件中提取模式 --ignore-case,忽略大小写 --quiet,取消显示 仅打印匹配模式的文件清单 打印不匹配模式的文件清单 --line-number,在匹配行前打印行 号 --silent,不显示错误信息 --revert-match,只显示不匹配的行 --word-regexp,如果被\<和\>引用, 就把表达式作为一个单词搜索
awk 'BEGIN ,x=1 ; y=3 ; x=y ; print "x=" x " ; y=" y -‘ awk 'BEGIN {x=3 ; x+=2 ; y=x+2 ; print "x=" x " ; y=" y }'
① if (condition) {then-body} [else {else-body}] ② while (condition) {body} ③ do {body} while (condition) ④ for (initialization; condition; increment) {body} 与C语言的for结构的 语法相同 ⑤ break : 跳出包含它的for、while、do-while 循环 ⑥ continue : 跳过for、while、do-while循环的body的剩余部分,而立 刻进行下一次循环的执行
基于指定规则从文件或者字符串中分解抽提 信息 基于指定的规则输出数据
awk的三种执行方式
1.
2.
awk *option+ ‘awk_script’ input_file1 *input_file2 …+
将awk_script放入脚本文件并以#!/bin/awk –f 作为首 行,并赋予该脚本可执行权限,然后在shell下调用该 脚本名称执行awk_script的内容:awk_file input_file 将所有awk_script放入一个单独的脚本文件,然后用 awk –f awk_file input_file(s)执行脚本
‘*grep’匹配所有0个或多个空格紧跟grep的行
匹配一个指定范围的字符 ‘*Gg+rep’匹配包含Grep或grep的行 匹配不在指定范围内的一 ‘*^A-FH-Z+rep’匹配所有不在A-F和H-Z范围内字符后跟rep的行 个字符 标记匹配字符 ‘\(love\)’中可以匹配love,且love被标记为\1
匹配所有单个(非)字母和数字字符
只匹配单词grep,不匹配egrep等
练习题:这些命令都能干啥?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
11.
12. 13. 14.
ls –l | grep ‘^a’ grep ‘test’ d* grep ‘test’ aa bb cc grep ‘*a-z]\{5\-’ aa grep ‘w\(es\)t.*\1’ aa grep ‘^n’ datafile grep ‘4$’ datafile grep ‘5\..’ datafile grep ‘\.5’ datafile grep ‘^*wesn+’ datafile grep ‘*A-Z][A-Z] [A-Z+’ datafile grep ‘ss* ’ datafile grep ‘*a-z]\{9\-’ datafile grep ‘\<[a-z].*n\>’ datafile
awk内部变量
自动内部变量
① ② ③ ④ ⑤ ⑥
NF:当前输入字段的字段数 NR:当前输入文件已经被读过的行数 FNR:所有输入文件中已经被读过的行数 FILENAME:当前输入文件的文件名 ARGC:命令行参数个数,输入文件数目+1 ARGIND:当前处理文件在ARGV内的索引
从另一个文本中读取下一行, sed ‘/movie/n temp2.txt’ temp.txt 并附加到下一行 用新文本替换定位文本 sed ‘4 \c “i like it”’ temp.txt 用替换模式替换相应模式 从另一个文本中读取文本 写文本到另一个文件 sed ‘s/source/okstr/”add before” &/p’ temp.txt sed ‘/name/r temp2.txt’ temp.txt sed ‘s/name/”my ” &/w temp2.txt’ temp.txt
练习题:这些命令能干什么?
sed ‘s/\.$//g’ temp.txt sed –e ‘/abcd/d’ temp.txt sed ‘s/ */ /g’ temp.txt
sed ‘s/^*+*+*//g’ temp.txt
sed ‘s/\.*+*+*/*+/g’ temp.txt sed ‘/^$/d’ temp.txt
3.
awk脚本的组成
可由一条或多条awk_cmd组成,两条awk_cmd 之间一般以NEWLINE分割 awk_cmd由两部分组成:awk_pattern { actions } awk命令的一般形式
awk ‘BEGIN , actions - awk_pattern1 , actions - … awk_patternN ,actions- END , actions -’ input_file 其中BEGIN 和END模块是可选的
sed命令的选项
-n -e Quiet, 不自动打印编辑 行,默认是打印的 下一命令是编辑命令, 使用多项编辑时加入此 选项 其后加sed脚本文件
-f
sed定位行号的方法
x x, y x~y /pattern/ x,y! 行号,指定某一行 指定x-y范围的行 从第x行开始,每隔y行 查询包含该模式的行 查询不包含指定行号x和y的行
分别锚定一个单词的起始 ‘\<grep’匹配以grep开始的单词 和结束 ‘grep\>’匹配以grep结束的单词 x正好重复5次的行、至少重复5次的行、重复次数在5-10次之 间的行
x\{5\}, x\{5,\},x\{5,10\} \w = [A-Za-z0-9] \W=[^A-Za-z0-9] \bgrep\b
awk_pattern的格式
1.
正则表达式 /regexp/
① ② ③
通用的正则元字符: [] ^ $ . | () * +是awk特有的元字符,匹配其前的单个字符一次以上 ?也是awk特有的元字符,匹配其前的单字符0/1次
举例:awk ‘/*\$0\.[0-9][0-9+.*/’ input_file 2. 布尔表达式 “==”,“>”, “~/regexp/”,“&&”, “||” 举例