1 / 38

生物信息学基础教程 第 4 讲:正则表达式教程

生物信息学基础教程 第 4 讲:正则表达式教程. —— 正则表达式与模式匹配. 本节内容. 正则表达式 正则表达式的定义与表示方法 正则表达式中的元字符( metacharacter ) VIM 编辑器 grep 命令 sed 编辑器 awk 工具. 正则表达式. 所谓正则表达式( regular expression , RE ), 指的是符合某种模式的字串,常用于从文件中或者字符串中查找和替换某些符合某种规则的字串. VIM 教程. —— linux 下最常用的文本编辑器. VIM 编辑器. 三种模式:各种模式之间切换

brigid
Download Presentation

生物信息学基础教程 第 4 讲:正则表达式教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 生物信息学基础教程第4讲:正则表达式教程 ——正则表达式与模式匹配

  2. 本节内容 • 正则表达式 • 正则表达式的定义与表示方法 • 正则表达式中的元字符(metacharacter) • VIM编辑器 • grep命令 • sed编辑器 • awk工具

  3. 正则表达式 • 所谓正则表达式(regular expression, RE), 指的是符合某种模式的字串,常用于从文件中或者字符串中查找和替换某些符合某种规则的字串

  4. VIM教程 ——linux下最常用的文本编辑器

  5. VIM编辑器 • 三种模式:各种模式之间切换 • 从命令行模式到插入模式:按下i键 • 从命令行模式到附加模式:按下a键 • 返回命令行模式:按下ESC键 • 退出编辑 • 保存并退出:在命令行模式按下:wq • 不保存退出:在命令行模式按下:q! • 保存:在命令行模式按下:w • 另存为其他文件名:按下:w filename

  6. VIM编辑功能 • 光标跳到文件头:命令行模式下按2下g • 光标跳到文件尾:按下:$ • 光标跳到行首:按下^ • 光标跳到行末:按下$ • 跳到100行:按下100g

  7. VIM查找功能 • 底行模式下输入/pattern/回车,对应符合pattern的文本就会显示为高亮 • 底行模式下输入:m,n/pattern/,就会在第m行到第n行查找pattern并高亮显示

  8. grep教程 ——正则表达式的应用

  9. grep简介 • 是Global search regular expression (RE) and Print out the line的缩写 • 强大的文本搜索工具,使用正则表达式搜索文本,并打印匹配的行 • 在一个或者多个文件中搜索字符串模式,搜索的结果输出到屏幕,不影响文件内容

  10. grep用法 • grep [option] ‘pattern’ input_files

  11. 常用grep命令选项

  12. grep正则表达式元字符

  13. 练习题:这些命令都能干啥? • 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

  14. sed教程 ——非交互性文本编辑

  15. sed简介 • 首先用which sed查看一下sed的位置 • 一个非交互性文本编辑器,编辑文件或标准输入导出的文件拷贝 • sed可以随意编辑小文件或者大文件 • 一次性处理所有改变,高效率 • 通过行号和正则表达式指定需要编辑的行

  16. sed用法 • 从文件的一个文本行或标准输入中读取数据,并将其拷贝到一个编辑缓冲区 • 读取命令行或者脚本的第一条命令,并用该命令查找模式或定位行号并编辑,重复过程直到命令结束 • sed [option] ‘sed_command’ input_file • sed [option] –f sed_script_file input_file • sed_script_file [option] input_file

  17. sed命令的选项

  18. sed定位行号的方法

  19. 基本sed编辑命令

  20. 练习题:这些命令能干什么?

  21. AWK教程 ——文件模式提取教程

  22. AWK简介 • Linux下的awk有三个版本:awk、nawk、gawk,一般所说的awk是指/bin/awk,也就是gawk (GNU awk) • awk的功能: • 基于指定规则从文件或者字符串中分解抽提信息 • 基于指定的规则输出数据

  23. awk的三种执行方式 • 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)执行脚本

  24. 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模块是可选的

  25. awk脚本的运行机制 • 如果存在BEGIN区块,执行其中的actions • 从输入文件中读取一行,称为读入一条记录 • 将读入的记录按照分隔符(FS/IFS)分割为多个字段,依次为$1,$2,…., 而$0表示整条记录。 • 将当前输入记录与awk_pattern相比较,如果匹配则执行actions,如果不匹配则跳过读入下一条记录,重复执行3,4,直到文件尾 • awk把输入文件的数据读入内存,然后操作内存中的输入数据副本,不会修改输入文件的内容 • awk总是输出到标准输出,如果需要输出到文件,可采用重定向

  26. awk_pattern的格式 • 正则表达式 /regexp/ • 通用的正则元字符: [] ^ $ . | () * • +是awk特有的元字符,匹配其前的单个字符一次以上 • ?也是awk特有的元字符,匹配其前的单字符0/1次 举例:awk ‘/*\$0\.[0-9][0-9].*/’ input_file • 布尔表达式 “==”,“>”, “~/regexp/”,“&&”, “||” 举例 • awk ‘$3 ~ /[^d]/’ input_file • awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file

  27. actions的格式 • actions是对awk读取记录进行的操作 • actions由一条或多条语句或命令组成,语句之间用分号分隔

  28. awk命令 • print “$1= ”, $1 • printf:与c语言的printf类似 • next:读取下一条记录并处理 • nextfile:读取文件列表的下一个文件 • exit:awk停止执行并跳出。如果有END存在,awk会执行END的actions

  29. awk语句 • 赋值语句 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的剩余部分,而立刻进行下一次循环的执行

  30. awk内部变量 • 自动内部变量 • NF:当前输入字段的字段数 • NR:当前输入文件已经被读过的行数 • FNR:所有输入文件中已经被读过的行数 • FILENAME:当前输入文件的文件名 • ARGC:命令行参数个数,输入文件数目+1 • ARGIND:当前处理文件在ARGV内的索引 • 字段变量:$1, $2, …, $NF, $0 • 其他内部变量 • FS : 输入记录的字段分隔符(默认是空格和制表符) • OFS : 输出记录的字段分隔符(默认是空格) • OFMT : 数字的输出格式(默认是 %.6g) • RS : 输入记录间的分隔符(默认是NEWLINE) ORS : 输出记录间的分隔符(默认是NEWLINE) • ARGV : 命令行参数数组 ENVIRON : 存储系统当前环境变量值的数组,它的每个成员的索引就是一个环境变量名 举例:cat /etc/passwd | awk 'BEGIN { FS=":" } {print "User name: "$1,"UID: "$4}'

  31. awk自定义变量 • 定义变量:varname=value • 表达式中不带引号的字符串即被视为变量,如果之前未被赋值,默认值为0或“” • 用法:awk 'awk_script' awkvar1=value1 awkvar2=value2 .... input_file • 优先级:awk_script中的变量定义优先于命令行中的变量定义 • 如果需要调用shell变量,可以采用awk 'awk_script' awkvar1=shellvar1 awkvar2=shellvar2 .... input_file

  32. awk内置函数 • 数值函数: int(x), sqrt(x), exp(x), log(x), sin(x), cos(x), atan2(y,x), rand(), srand(x), srand() • 字符串函数: index(in, find), length(s), match(s, r), sprintf(), sub(p,r,t), gsub(p,r,t), substr(str, st, len), split(s,a,fs), tolower(str), toupper(str) • 系统函数: close(filename), system(command)

  33. awk自定义函数 • 自定义函数格式: function fun_name(param_list) { function_body } • 举例: awk ‘{ print “sum=”, SquareSum($1, $2) } function SquareSum(x,y) { sum=x*x+y*y; return sum }’ grade.txt

  34. awk数组 • 访问数组元素 for ( element in array_name ) print array_name[element] • 举例: awk ‘BEGIN{print split(“123#456#789”, mya, “#”); for ( i in mya ) { print mya[i] }}’

  35. 避免awk错误的方法 ① 确保整个awk_script用单引号括起来 ② 确保awk_script内所有引号成对出现 ③ 确保用花括号括起动作语句,用圆括号括起条件语句 ④ 可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法 ⑤ 如果使用字符串,一定要保证字符串被双引号括起来(在模式中除外)

  36. 2) 在awk中,设置有意义的变量名是一种好习惯,在进行模式匹配或关系操作时更容易理解。一般的变量名设置方式为name=$n 3) 通常在BEGIN部分给一些变量赋值是很有益的,这样可以在awk表达式进行改动时减少很多麻烦 4) awk的基本功能是根据指定规则抽取输入数据的部分内容并输出,另一个重要的功能是对输入数据进行分析运算得到新的数据并输出,这是通过在 awk_script中对字段变量($1、$2、$3...)重新赋值或使用更大的字段变量$n(n大于当前记录的NF)而实现的 5) 使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。这时就需要字符串屏蔽序列。awk中经常使用的屏蔽序列有: \b 退格键 \t tab键 \f 走纸换页 \ddd 八进制值 \n 新行 \r 回车键 \c 任意其他特殊字符。eg: \\为反斜线符号

  37. awk的输出函数printf ① 格式: printf ("输出模板字符串", 参数列表) ② 参数列表是以逗号分隔的列表,参数可以是变量、数值或字符串。 ③ 输出模板字符串的字符串中必须包含格式控制符,有几个参数就要求有几个格式控制符。模板字符串中可以只有格式控制符而没有其它字符。 ④ 格式控制符: %[-][width][.prec]fmt % : 标识一个格式控制符的开始,不可省略。 - : 表示参数输出时左对齐,可省略。 width : 一个数字,表示参数输出时占用域的宽度,可省略。 .prec : prec是一个数值,表示最大字符串长度或小数点右边的位数,可省略。 fmt : 一个小写字母,表示输出参数的数据类型,不可省略。 ⑤ 常见的fmt : c ASCII字符, d 整数 ,e 科学记数法浮点数, f 浮点数,如 123.44 g 由awk决定使用哪种浮点数转换e或f ,o 八进制数, s 字符串, x 十六进制数 ⑥ 举例: echo "65" | awk '{ printf ("%c\n",$0) }' // 将打印 A awk 'BEGIN{printf "%.4f\n",999}' //将打印 999.0000 awk 'BEGIN{printf "2 number:%8.4f%8.2f",999,888}' // 将打印 2 // number:999.0000 888.000

  38. 总结 • sed适合处理整行的文本 • awk适合处理下面格式的文件 col1 col2 col3 col4 … • 更复杂的文本可通过结合sed和awk进行处理,或者通过其他更高级的脚本语言如perl/python进行处理 • 记住:C/C++不适合用来处理文本或字符串,所以,掌握1-2种脚本语言对于生物信息学来说,是非常有必要的

More Related