生信喵 发表于 2022-7-1 20:41:28

文本筛选 grep

一、软件介绍
       grep 是 Linux 下非常重要的一个工具,grep 全称是 Global Regular Expression Print,表示全局正则表达式版本。grep 是一个文本筛选器,其实也是搜索的功能,grep 的工作原理是,给定一个条件,我们也叫作模式,然后从文本中筛选出符合这个条件的内容,然后将这一行输出出来。有点类似于搜索引擎,在一个很大的文本中,筛选出满足设定条件的部分。grep在生物信息分析中,可以快速从文本中筛选出需要的内容。

二、选项参数
       首先来介绍一下 grep 的选项参数,grep 的选项参数也很多,主要分为四部分,首先是正则表达式相关的选项,然后是 Miscellaneous,其余方面,输出控制,以及上下文控制等。
-E 或--extended-regexp 扩展功能的 grep,也叫作 egrep,可以直接敲 egrep 命令。
-F 或--fixed-regexp 将范本样式视为固定字符串的列表,也叫作 fgrep,可以直接敲 fgrep
命令。
-G 或--basic-regexp 将范本样式视为普通的表示法来使用。
-P 或--perl-regexp 使用 perl 的正则表达式。
不同模式的正则表达式之间稍微有些差别。
-f --file=接一个模式的文件,让 grep 查找符合范本条件的文件内容,格式为每列一个范本样式;
当要搜索条件过多时,可以将条件写入一个文件。
-i 或--ignore-case 忽略字符大小写的差别。
-w 或--word-regexp 只显示全字符合的列。
-x 或--line-regexp 只显示全列符合的列。
#输出选项,
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H 在显示符合范本样式的那一列之前,表示该列所属的文件名称。-l 列出满足条件的文件名称,而不是具体内容,这个用在文件很多时,筛选出哪些文件包含条件
的内容。然后将这些文件筛选出来。
-v,--revert-match ,显示不匹配模式的行,有时候我们需要输出哪些是不满足条件的行,这时
就可以使用-v 选项。
-n 是在输出满足条件的内容前加行行号。
-r 和-d 类似,用于搜索目录,可以用于搜索目录下的每一个文件;
#上下文控制。
-B 是 before 的意思,后面接一个数字,表示将满足条件的行,前面几行也输出出来。
-A 是 After 的意思,和-B 类似,表示将满足条件的行,下面几行输出出来。
-C 后面接一个数字, 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 也可以
不用-C,直接连字符接数字。比如-2 输出满足条件的上下几行。
-c 或--count 计算符合范本样式的列数。
三、使用案例
#1 统计fasta条数
grep ">" soapdenovo.fa | wc

#2 去除#开头的行
grep -v "^#" demo.gff | head

#3 根据关键字搜索
grep"C2875"soapdenovo.fa

#4 关键字上下内容
grep -A 1 "C2381"soapdenovo.fa
grep -B 1 "C2381"soapdenovo.fa
#拉直序列整长
seqkit seq -w 0 soapdenovo.fa| grep -A 1 "C2381"
cat demo.gff | grep "lnc_RNA"

#5 使用正则表达式
seqkit seq -w 0 demo.fasta | grep "A\{7,10\}"

#6 筛选关键字,并输出行号
grep -n "EGFR" demo.bed

#7 删除掉空行
grep -v "^$" test.bed

#8 设定锚定符
locate bwa | grep "bwa"
locate bwa | grep "bwa$"
locate bwa | grep "\bbwa$"
#相同效果可以使用locate正则
locate -r "\bbwa$"

#9 计算匹配字符行数
grep -c "EGFR" demo.bed

#10 计算数目并排序
grep -v "^#" demo.gff | awk '{print $3}' | sort-uniq-count-rank

#11 同时满足多个条件
grep -e "ncRNA" -e "ncRNA_gene" demo.gff

#12 显示包含关键字的文件
grep -l aspera /share/*/*.sh
页: [1]
查看完整版本: 文本筛选 grep